为啥存储函数总是引用更新后的全局 i 变量的值?
Posted
技术标签:
【中文标题】为啥存储函数总是引用更新后的全局 i 变量的值?【英文标题】:Why stored function will always refer to the value of the updated global i variable?为什么存储函数总是引用更新后的全局 i 变量的值? 【发布时间】:2021-09-05 07:49:56 【问题描述】:var printNumTwo;
for (var i = 0; i < 3; i++)
if (i === 2)
printNumTwo = function()
return i;
;
console.log(printNumTwo());
为什么 i 的打印值是 3 而不是 2?
【问题讨论】:
【参考方案1】:由于var
关键字,当您使用var
关键字进行循环时,它会替换值而不是创建新值,其中i
创建一次并在每次迭代时被i
替换...您应该使用let
或const
来期待你想要的输出。
示例:
使用let
关键字
for (let i = 0; i < 3; i++)
setTimeout(() => console.log(i), i * 100)
这里我们使用了var
关键字
for (var i = 0; i < 3; i++)
setTimeout(() => console.log(i), i * 100)
换句话说,在 javascript 中使用 var
关键字来声明一个变量,在函数或闭包范围内创建一个变量,而不是在块范围内。
【讨论】:
以上是关于为啥存储函数总是引用更新后的全局 i 变量的值?的主要内容,如果未能解决你的问题,请参考以下文章