gpt4 book ai didi

javascript - 理解 Javascript/Node 中闭包的变量捕获

转载 作者:IT老高 更新时间:2023-10-28 22:08:15 33 4
gpt4 key购买 nike

除了标准之外,Javascript中的变量捕获是否有明确的来源(阅读标准很痛苦)?

在下面的代码中i是按值复制的:

for (var i = 0; i < 10; i++)
{
(function (i)
{
process.nextTick(function ()
{
console.log(i)
})
}) (i)
}

所以它打印 1..10。 process.nextTick 是 Node 中 setTimeout(f,0) 的模拟。

但在接下来的代码中,我似乎没有被复制:

for (var i = 0; i < 10; i++)
{
var j = i
process.nextTick(function ()
{
console.log(j)
})
}

它打印 9 10 次。为什么?我对引用/一般文章更感兴趣,而不是解释这个具体的捕获案例。

最佳答案

我没有方便的引用资料。但底线是:首先,您将 i 显式传递给匿名函数,这会创建一个新范围。您没有在第二个中为 ij 创建新范围。此外,JavaScript 总是捕获变量,而不是值。所以你也可以修改 i。

JavaScript var 关键字具有函数作用域,而不是 block 作用域。所以 for 循环不会创建作用域。

请注意,非标准 let关键字具有本地范围。

关于javascript - 理解 Javascript/Node 中闭包的变量捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10095404/

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