[英]Why does JavaScript behave like synchronous without web API call
我知道 JavaScript 本质上是同步的。 因此,当我使用 Web API 调用函数时,它会同步执行:
setTimeout(function(){
console.log('1');
}, 2000);
console.log('2');
它将打印“2”然后是“1”。
但是当我运行像 for 循环这样的循环并增加迭代时,它会同步执行:
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 中添加的,它与传入 promise 的then
或catch
的回调何时被调用有关。 就是这样。 例如, setTimeout
不是 JavaScript 的一部分; 它是主要使用 JavaScript(浏览器)的主机环境的一部分。 (它也是一些非浏览器主机环境的一部分,比如 NodeJS。)
JavaScript 主要用于鼓励异步操作(浏览器)的环境中,用于响应用户事件(异步)、ajax 完成(异步)和计时器回调(异步),但该语言几乎完全同步。
JS 是事件驱动的,这就是为什么你认为它是异步的.. 但它只有异步功能..
for
循环没有任何事件回调,所以它只是同步
我知道了
JavaScript 是同步的,异步功能取决于您的函数实现。
它有一个事件循环并且它同步执行,但是每当它获得异步函数(采用回调的函数,即 setTimeout ,fs.readFile() 等)时,它不是 javaScript 的一部分,然后,它将函数放入队列并在所有本机代码(在当前范围内)执行后调用队列函数,然后弹出队列并调用函数。
和 setTimeout 显式地设置了一个异步定时回调函数。
检查此javaScript 异步行为;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.