【问题标题】:Can I use $(document).ready(function() { ... }); to prevent global namespace pollution? [duplicate]我可以使用 $(document).ready(function() { ... });防止全局命名空间污染? [复制]
【发布时间】:2017-05-15 10:20:29
【问题描述】:

如果 JavaScript 具有函数级别范围,则将我所有的 JS 代码包装在里面

$(document).ready(function() { ... }); 

足以防止全局命名空间污染?如果没有,有没有更好的方法可以做到这一点?

【问题讨论】:

  • 你应该寻找为什么你在你的代码中污染了全局命名空间,而不是在这里包装你的代码。

标签: javascript


【解决方案1】:

这是一个好的开始,但您还需要确保不要在函数中创建任何全局变量。设置严格模式(使用"use strict";)应该是这样做的大部分。检查所有提及window 的内容。

它确实具有延迟代码执行直到 DOM 准备好的副作用。这并不总是可取的。您可能想改用简单的 IIFE。

【讨论】:

    【解决方案2】:

    是的,这已经足够了。

    由于 JavaScript 具有隐藏成员的函数范围,因此在其中声明的新成员对全局范围是隐藏的。

    您需要确保在函数内部声明它们(即var variableName),否则它们将被提升到封闭范围(可能是全局的)。

    当然,如果将变量直接分配给全局对象会污染它(只是为了完整性而提及)。

    正如Quentin 回答的那样,对use strict; 使用严格模式将确保您没有未声明的变量,否则这些变量会附加到全局上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多