JavaScript - 在 for 循环中使用 let 和 var 关键字声明迭代变量有啥区别? [复制]

Posted

技术标签:

【中文标题】JavaScript - 在 for 循环中使用 let 和 var 关键字声明迭代变量有啥区别? [复制]【英文标题】:JavaScript - What is the difference between declaring a iteration variable using a let versus a var keyword inside a for-loop? [duplicate]JavaScript - 在 for 循环中使用 let 和 var 关键字声明迭代变量有什么区别? [复制] 【发布时间】:2021-11-15 21:40:25 【问题描述】:

在 for 循环体中使用 let 和在 javascript for 循环体中使用 var 有什么区别?它们的工作方式是否不同?为什么?

例子:

使用 let

for (let i = 0; i < 10; i++) 


使用变量

for (var i = 0; i < 10; i++) 


这些在幕后的工作方式是相同的还是不同的,其中一个实际上功能更好吗?

这种差异是否也适用于 while 循环和 do-while 循环?

【问题讨论】:

尝试打印 I 的值,在循环之外,你会看到不同 也许在这个问题上一个非文字的答案可能会很足智多谋,帮助我看看 或***.com/q/762011/125981 或***.com/q/111102/125981 这突出了 let 在 for 循环上下文中使用时的效果,可能值得一看:Explanation of `let` and block scoping with for loops 【参考方案1】:

let 是块作用域,var 不是。 使用let,您不能在forloop 主体之外使用i。 使用var(函数作用域或全局作用域)您可以。

for (var j = 0; j < 10; j++) 



console.log(j);


for (let i = 0; i < 10; i++) 



console.log(i);

您可以在 chrome 控制台中使用 var 运行 for 循环,并会看到 i 已附加到窗口对象。

【讨论】:

循环 2 中的 i 的范围是哪个块,大括号之间的区域?或者特别是括号之间的区域......就像一个特殊的命令在场景下使用循环规范的三个部分做一些事情。显然 for 似乎类似于一个函数调用,但它看起来更像是一个 3 语句部分的指令来继续...... 在这种情况下,范围是什么,它是否只是你被限制在大括号之间的地方,或者甚至在全局意义上,在大括号之外? 花括号内。那是一个块。虽然,我们也可以在括号内使用它。不知道 for 循环构造是如何工作的 因此,当您根据您的描述将变量移动到窗口(全局范围)时,似乎是这样,因为它被声明为 var,但是是否发生了类似于变量提升的事情?如果是这种情况,我们为什么要使用 var?

以上是关于JavaScript - 在 for 循环中使用 let 和 var 关键字声明迭代变量有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 Javascript for...in 和 for...of 循环中使用 continue 和 break 吗?

Javascript在for循环中使用值作为对象键?

JavaScript 中的 While 循环与 For 循环? [关闭]

使用javascript for循环创建金字塔[重复]

for循环中的Javascript内存使用情况

JavaScript中forfor...infor...offorEach的区别和用法