考虑这段代码:
for (var j = 0; j < 10; j++){
// ...
}
假设 for 循环紧随其后出现,它使用相同的 j
计数器变量。由于变量提升,Netbeans 提示第二个 j
重新定义了第一个。
是否有任何理由或为什么不应该用闭包包围我的循环:
(function(){
for (var j = 0; j < 10; j++){
// ...
}
})();
...以防止变量提升行为,并停止 Netbean 的投诉?
最佳答案
Javascript 变量具有函数作用域 - 而不是您可能习惯的 block 作用域。 (这是我们必须习惯的 Javascript 大疣)
通常的风格规则建议最好在函数开头声明所有变量,包括循环变量只声明一次。 (不要在 for 语句中声明它们 - 这在其他语言中有意义,但在 Javascript 中则不然)。
希望这能让您的编译器冷静下来。
(您不必担心两个循环都使用同一个变量——变量无论如何都会重新初始化)
关于javascript - 有什么理由故意引入闭包来防止变量提升?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4964776/