为什么 JavaScript 在没有网络 API 调用的情况下表现得像同步
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();
会分别打印第一秒
So, is JavaScript performing synchronously with native code?
第一个示例是异步的,因为您已经使用 setTimeout
明确地要求它是异步的。 setTimeout
(及其关系 setInterval
)显式设置一个 异步 定时回调给您传递给它们的函数。
其余示例不使用像 setTimeout
(和 ajax 等)那样创建异步的任何内容,因此它自然是同步的。
I know javaScript is asynchronous by nature
不,JavaScript(语言)本质上是同步。从字面上看,JavaScript 的唯一异步方面是在 ES2015 中添加的,并且与何时调用传递到 promise 的 then
或 catch
的回调有关。而已。例如,setTimeout
不是 JavaScript 的一部分;它是主要使用 JavaScript 的主机环境的一部分(浏览器)。 (它也是一些非浏览器主机环境的一部分,例如 NodeJS。)
JavaScript 主要用于鼓励异步操作(浏览器)的环境,用于响应用户事件(异步)、ajax 完成(异步)和计时器回调(异步) ),但 语言 几乎完全同步。
JS 是事件驱动的,这就是为什么你认为它是异步的..但它只有异步特性..
for
循环没有任何事件回调,所以它只是同步
我知道
JavaScript 是同步和异步功能取决于您的功能实现。
它有一个事件循环,它同步执行,但只要它会得到异步函数(接受回调的函数,即 setTimeout,fs.readFile() 等),这不是 [=28 的一部分=] 那么,
它将函数放入队列并在所有本机代码(在当前范围内)执行后调用队列函数,然后弹出队列并调用函数。
和 setTimeout 显式设置了一个异步定时回调函数。
检查这个 javaScript Async behavior ;
我知道 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();
会分别打印第一秒
So, is JavaScript performing synchronously with native code?
第一个示例是异步的,因为您已经使用 setTimeout
明确地要求它是异步的。 setTimeout
(及其关系 setInterval
)显式设置一个 异步 定时回调给您传递给它们的函数。
其余示例不使用像 setTimeout
(和 ajax 等)那样创建异步的任何内容,因此它自然是同步的。
I know javaScript is asynchronous by nature
不,JavaScript(语言)本质上是同步。从字面上看,JavaScript 的唯一异步方面是在 ES2015 中添加的,并且与何时调用传递到 promise 的 then
或 catch
的回调有关。而已。例如,setTimeout
不是 JavaScript 的一部分;它是主要使用 JavaScript 的主机环境的一部分(浏览器)。 (它也是一些非浏览器主机环境的一部分,例如 NodeJS。)
JavaScript 主要用于鼓励异步操作(浏览器)的环境,用于响应用户事件(异步)、ajax 完成(异步)和计时器回调(异步) ),但 语言 几乎完全同步。
JS 是事件驱动的,这就是为什么你认为它是异步的..但它只有异步特性..
for
循环没有任何事件回调,所以它只是同步
我知道
JavaScript 是同步和异步功能取决于您的功能实现。
它有一个事件循环,它同步执行,但只要它会得到异步函数(接受回调的函数,即 setTimeout,fs.readFile() 等),这不是 [=28 的一部分=] 那么, 它将函数放入队列并在所有本机代码(在当前范围内)执行后调用队列函数,然后弹出队列并调用函数。
和 setTimeout 显式设置了一个异步定时回调函数。
检查这个 javaScript Async behavior ;