我确定我已经阅读了有关 SO 的讨论,但找不到它。简单地说,在循环声明中声明 for 循环的增量是否有缺点?这有什么区别:
function foo() {
for (var i=0; i<7; i++) {
// code
}
}
...还有这个:
function foo() {
var i;
for (i=0; i<7; i++) {
// code
}
}
既然 JS 有函数作用域,那应该没问题吧?是否存在前一种方法会导致问题的边缘情况?
如果它们是相同的,为什么 Crockford/JSLint 都是“不可能的”?
最佳答案
这些是完全一样的。 javascript 中的所有局部变量都具有函数作用域,这意味着它们在声明它们的整个函数中都是有效的。一开始这通常是违反直觉的,因为大多数花括号语言将变量的生命周期限定在它们声明的 block 中。
一部分 Javascript 开发人员非常喜欢第二种形式。基本原理是,由于所有变量都具有函数作用域,因此即使对于那些不熟悉 Javascript 的人,您也应该在函数级别声明它们,以使生命周期明确。这只是一种风格,绝不是硬性规定
编辑
请注意,随着 ES6 let 的引入,您现在可以在循环中使用 let 获取真正的 block 范围变量 more details
for(let i = 1; i <= 5; i++) {
setTimeout(function(){
console.log('Value of i : ' + i);
},100);
}
关于javascript - 在 Javascript 中为循环声明声明 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10200994/