我知道javaScript本质上是同步的。因此,当我使用Web API调用函数时,它执行同步。
setTimeout(function(){
console.log('1');
}, 2000);
console.log('2');
它将打印' 2'然后' 1'
但是当我像循环一样运行循环并增加迭代时它会执行同步
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是否与本机代码同步执行
答案 0 :(得分:4)
第一个示例是异步的,因为您已使用setTimeout
明确要求使其异步。 setTimeout
(及其关系setInterval
)明确设置了一个异步定时回调函数。
其余的示例不使用任何创建异步的内容,例如setTimeout
(以及ajax等),所以它自然会同步。
我知道javaScript本质上是异步的
不,JavaScript(该语言)本质上是同步。从字面上看,JavaScript的唯一异步方面是在ES2015中添加的,并且与调用传递到承诺then
或catch
的回调有关。就是这样。例如,setTimeout
不是JavaScript的一部分;它是主要使用JavaScript(浏览器)的主机环境的一部分。 (它也是一些非浏览器主机环境的一部分,如NodeJS。)
JavaScript主要用于鼓励异步操作(浏览器)的环境中,它用于响应用户事件(异步),ajax完成(异步)和定时器回调(异步),但 >语言几乎完全同步。
答案 1 :(得分:0)
JS 事件驱动,这就是为什么你认为它是异步的..但它只有异步功能..
for
循环没有任何事件回调,所以它只是同步
答案 2 :(得分:0)
我知道了
JavaScript是同步的,异步功能取决于您的功能实现。
它有一个事件循环并且它是同步执行的,但每当它获得async函数(接受回调的函数,即setTimeout,fs.readFile()等)时,这不是javaScript的一部分, 它将函数放入队列并在所有本机代码(在当前作用域中)执行后调用队列函数,然后弹出队列并调用函数。
和setTimeout显式设置了对函数的异步定时回调。