gpt4 book ai didi

javascript - 'setTimeOut' 在 JavaScript 'for' 循环中调用,为什么会失败?

转载 作者:数据小太阳 更新时间:2023-10-29 04:00:53 26 4
gpt4 key购买 nike

<分区>

让我澄清一下我的问题。我不是在问如何让下面的代码工作。我知道您可以使用 let 关键字或捕获它自己的 i 值的 iffe。我只需要说明在以下代码中如何访问值 i 。我阅读了以下博客文章,了解以下代码为何不起作用。 Blog post

for (var i = 1; i <= 5; i++) {
setTimeout(function() { console.log(i); }, 1000*i); // 6 6 6 6 6
}

作者声称代码将无法运行,因为我们将变量 i 作为引用而不是值传递。也就是说,不是每次迭代都提供 i 的值,而是将变量提供给 setTimeout 中的回调作为引用。实际上,当循环终止并触发回调时,我们将引用变量 i,它将是 6。它是这样工作的吗?

这是我的理解。我的理解是,在执行循环时,我们不会将任何内容“传递”给 setTimeout 函数的回调。我们只是设置异步调用。当闭包回调函数确实执行时,它们会根据词法范围规则查找变量 i。也就是说,闭包在作用域中看起来是回调已经结束,在这种情况下再次是 6,因为它是在 for 循环完成之后完成的。

它是哪一个,函数是根据在每次迭代中作为引用传递的变量还是因为词法范围将 i 的值解析为 6?

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