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 吗?