Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么JavaScript在没有web API调用的情况下表现得像同步的_Javascript_Asynchronous_Dom Events - Fatal编程技术网

为什么JavaScript在没有web API调用的情况下表现得像同步的

为什么JavaScript在没有web API调用的情况下表现得像同步的,javascript,asynchronous,dom-events,Javascript,Asynchronous,Dom Events,我知道JavaScript本质上是同步的。因此,当我使用web API调用函数时,它会同步执行: setTimeout(function(){ console.log('1'); }, 2000); console.log('2'); var first = function(){ for(var i=0;i<=100000000;i++){ if(i==100000000){ console.log('first')

我知道JavaScript本质上是同步的。因此,当我使用web API调用函数时,它会同步执行:

setTimeout(function(){
  console.log('1');
}, 2000);

console.log('2');
var first = function(){
    for(var i=0;i<=100000000;i++){
        if(i==100000000){
            console.log('first')
        };
    };
};

var second = function() {
    console.log('second')
};

var a = function() {
    first();
    second();
}

a();
它将先打印“2”,然后打印“1”

但当我运行类似for循环的循环并增加迭代次数时,它会同步执行:

setTimeout(function(){
  console.log('1');
}, 2000);

console.log('2');
var first = function(){
    for(var i=0;i<=100000000;i++){
        if(i==100000000){
            console.log('first')
        };
    };
};

var second = function() {
    console.log('second')
};

var a = function() {
    first();
    second();
}

a();
它将分别打印第一秒

那么,JavaScript是否与本机代码同步执行


第一个示例是异步的,因为您使用setTimeout显式地要求它是异步的。setTimeout及其关系setInterval显式地为传递给它们的函数设置异步定时回调

剩下的示例没有使用任何创建异步性的东西,比如setTimeout和ajax等,所以它自然是同步的

我知道javaScript本质上是异步的

不,JavaScript语言本质上是同步的。实际上,JavaScript的唯一异步方面是在ES2015中添加的,它与何时调用传入承诺的then或catch的回调有关。就这样。例如,setTimeout不是JavaScript的一部分;它是主机环境的一部分,JavaScript主要用于浏览器。它也是一些非浏览器主机环境的一部分,比如NodeJS

JavaScript主要用于支持异步操作的环境浏览器,用于异步响应用户事件、异步ajax完成和异步计时器回调,但该语言几乎完全是同步的。

JS是事件驱动的,这就是为什么您认为它是异步的。。但它只有异步功能

for循环没有任何事件回调,所以它只是同步,我知道了

JavaScript是同步的,异步功能取决于您的函数实现

它有一个事件循环,并同步执行,但每当它获得异步函数时,即接受回调的函数,即setTimeout、fs.readFile等,它不是javaScript的一部分, 它将函数放入队列并在当前范围内的所有本机代码执行后调用队列函数,然后弹出队列并调用函数

和setTimeout显式设置对函数的异步定时回调


检查这个

javaScript本质上是异步的-不,它不是。@Turnip请你发送一些链接给我,我可以看看。提前谢谢你看什么`Javascript本质上不是异步的。据我所知,Array.forEach方法是同步的。@MarioAlexandroSantini true,我将其删除