javascript - 有什么理由故意引入闭包来防止变量提升?

标签 javascript variables closures

考虑这段代码:

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/

相关文章:

javascript - 删除 OwlCarousel 中的事件(居中)项目

javascript - 是否有一个功能可以从脚本中排除我的工作簿中的某些工作表

arrays - 是否可以在 Perl foreach 循环中分配两个变量?

ios - 创建 CLLocationManager 时分配 CLLocationManager 委托(delegate)

JavaScript 理解某些闭包行为

javascript - js悬挂应用程序中的图像幻灯片

javascript - CanvasJS 多图表

jquery - jQuery.each 回调的第一个参数 (k) 有何用途?

swift - block 没有真正执行?

javascript - 我不明白为什么 Greasemonkey 脚本中的 GM_xmlhttpRequest 的 URL 不会改变