gpt4 book ai didi

javascript - JavaScript 执行时序中的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 08:41:56 25 4
gpt4 key购买 nike

我是一本名为 async javascript 的阅读书,这本书的一个例子试图表明当处理器在同一进程中没有指令执行时,javascript 中的事件将被触发。为了证明他的话,他举了一个例子:

for (var i = 1; i <= 3; i++) {
setTimeout(function(){ console.log(i); }, 0);
};

输出是:

4
4
4
4

一切都很好,我预料到了结果。但是当我将“console.log(i)”置于功能之外时,结果将会改变。

for (var i = 1; i <= 3; i++) {
setTimeout(console.log(i), 0);
};

输出是:

1
2
3

我不知道为什么这些示例中的输出不同。我知道它是关于变量范围的,但不知道确切的原因。我希望有人能提供帮助。

最佳答案

i don't know why the output is different in those examples

因为在第二种情况下,您正在调用 console.log(i) 立即 并将返回值 undefined 传递给 setTimeout (而不是像第一种情况那样传递函数)。
参数总是先求值,所以如果你有 foo(bar())bar 会先被调用,它的返回值会传递给 foo .

您可以通过在循环后添加 console.log('after'); 来验证这一点。在第一种情况下,你应该得到

after
4
4
4

在第二种情况下,你会得到

1
2
3
after

证明 setTimeout 没有向事件队列添加任何内容。

另见 Calling functions with setTimeout()

i know its about variable scopes

其实不是,是时机,console.log执行的时刻。

关于javascript - JavaScript 执行时序中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25508853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com