gpt4 book ai didi

javascript - 解释 Javascript 中闭包的输出

转载 作者:行者123 更新时间:2023-11-28 18:09:55 25 4
gpt4 key购买 nike

在下面的代码片段中,6 被打印了 5 次。请解释一下这个输出行为。

对于每个 i,我都会调用 settimeout 函数,因此 console.log 应该具有 i 的值。代码:

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

O/P66666

O/P 预期12345

最佳答案

即使超时 0 也会产生相同的结果,要理解这一点,您必须了解事件循环方面的回调概念。理想情况下,只有当堆栈为空时才会执行回调,js代码执行是基于堆栈的,我的意思是执行上下文,所以当你在这里说for循环时,这意味着第一个i被插入堆栈,所以现在堆栈处理变量及其增量值它涉及回调(setTimeout),它存储为事件循环。

在事件循环内运行 block 的唯一方法是当堆栈为空时,即当循环作为闭包函数结束时,它保留打印所有日志的最后一个值。

查看示例,您将看到 1 到 6 个外部回调,因为它在堆栈中执行,但仅当堆栈为空时才会回调。

如果您想最好地了解执行上下文,请转到 loupe并复制粘贴您的 js 代码以查看操作。

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

}

关于javascript - 解释 Javascript 中闭包的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41850424/

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