JavaScript只有函数范围。因此,在for循环中声明的变量对于整个函数是可见的。处理在多个for循环中声明的变量的最习惯的方法是什么?
例如,
function foo() {
for(var i = 0; i < n; i++) {
// Do something
}
// i is still in scope here
}
当我们有多个for循环,这打开了我们如何处理这些其他变量的for循环的问题。
我们是否使用不同的变量?
for(var i = 0; i < n; i++) { }
for(var j = 0; j < n; j++) { }
或者我们使用相同的变量,但只是分配一个值(而不是声明它)?
for(var i = 0; i < n; i++) { }
for(i = 0; i < n; i++) { }
或者声明i
以外的循环?
var i;
for(i = 0; i < n; i++) { }
for(i = 0; i < n; i++) { }
或redeclare i
?
for(var i = 0; i < n; i++) { }
for(var i = 0; i < n; i++) { }
所有这些工作(或至少他们在我的浏览器的最新版本上)。虽然,JSHint不喜欢最后一种方法。
有没有一种最习惯的方法?
我会使用最后两个之一。尽管JSHint的投诉,我喜欢最后一个;如果我必须保持沉默,我会使用前一个。 – Barmar
为了记录,JavaScript正在获得块范围。所以,今后,你还会['for(let i ...)'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let),它会将'i'声明为循环的本地。 –
我更喜欢在两个循环之外声明'i'(但不一定在函数的顶部 - 请不要将它们全部放在一行/逗号分隔的位置),但是如果您发现自己正在执行此操作太多了,也许你需要更多的功能? – Ryan