javascript - 在循环中声明的变量和重新使用的变量会发生什么

标签 javascript variables scope variable-declaration

<分区>

在 javascript 中,变量只有函数作用域。因此,它要么是全局变量,要么是一个在整个函数中都可访问的变量,而不管它在何处声明(在函数内)。

我猜最好的做法是在 'use strict'; 之后立即在顶层声明所有变量?

如果我在 5 个循环中声明相同的 i var,会发生什么情况?

for (var i = 0; i < someValue; i+=1) { ... } 

变量是简单地重置为 0 还是循环设置它的初始值,一切都继续进行?这会引起并发症吗?

最佳答案

如您所见,i设置为 0for 的开头循环:i = 0 . var i部分被提升到函数的顶部,每增加一个 var i … 重新声明 i , 和 i = 0部分重新定义它。重新声明是不必要的,并且会使代码变得不那么干净(JSHint 会警告您这一点)。

如果您使用 i后来,在任何循环之外,i设置为 for 的任何值loop 用它做了。

for(var i = 0; i < 4; i++){
  /*
  As the last few steps i is incremented (i == 4),
  then it is checked with (i < 4), which is false; the loop is done.
  */
  //…
}
i; // 4

因为您通常会在循环头部重新定义每个迭代变量,所以这不会导致任何其他问题。

然而,为了使代码更简洁,每个循环使用一个变量是明智的,或者将 let变量,而不是 var变量,如 let变量的范围为 for仅循环 block :

for(let i = 0; i < 20; i++){
  // …
}

for(let i = 0; i < 10; i++){ // This is fine.
  // …
}

let变量仅在符合 ECMAScript-6 的浏览器中可用,而在 Firefox 中需要选择加入版本。

关于javascript - 在循环中声明的变量和重新使用的变量会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32397373/

相关文章:

javascript - Angularjs 无法在 Nodejs Express 中工作

java - 在 java 字符串中使用 intern

javascript - React-leaflet:如何调用像resetStyle这样的GeoJson方法?

javascript - 使用 Jquery 返回许多要在 html 中更新的值

function - PowerShell函数返回变量

c# - 哪种编码更有效: reusing variable vs writing same code twice?

javascript - 将类添加到 AngularJs 中的多个元素

javascript - instanceof,范围和对象

javascript - 创建模板并在 JS 中使用变量进行替换

javascript - 在 AngularJS 中访问同一模块中的工厂