gpt4 book ai didi

javascript - 为什么变量值在 var 和 setTimeout 中不同

转载 作者:行者123 更新时间:2023-12-02 15:46:42 25 4
gpt4 key购买 nike

在练习 JavaScript 时,我遇到了一个疑问,我正在使用 var 和使用 let 关键字打印变量 i 值,并且两次都得到不同的结果,但无法理解为什么我需要对此进行一些解释?

i 声明为 let:

<script>
(function timer() {
for (let i = 0; i <= 5; i++) {
setTimeout(
function clog() {
console.log(i);
}, i * 1000
);
}
})();
</script>

输出是从 0 到 5 的计数:

另一方面,将 i 声明为 var:

<script>
(function timer() {
for (var i = 0; i <= 5; i++) {
setTimeout(
function clog() {
console.log(i);
}, i * 1000
);
}
})();
</script>

输出是 6 的 6 倍:

最佳答案

原因很简单。 let 是 block 级的。这意味着当你离开 for 循环的范围时,它就不存在了。 var 范围更广。这里发生的是 for 循环递增 i 5 次,然后在第一个 setTimeout 触发(不到 1 秒)之前以 i = 6 退出循环全局范围。 let声明的i来自函数作用域,而用var声明的i来自外部作用域

let 和 var 的区别: What is the difference between "let" and "var"?

关于javascript - 为什么变量值在 var 和 setTimeout 中不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73959430/

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