【发布时间】:2017-05-15 10:20:29
【问题描述】:
如果 JavaScript 具有函数级别范围,则将我所有的 JS 代码包装在里面
$(document).ready(function() { ... });
足以防止全局命名空间污染?如果没有,有没有更好的方法可以做到这一点?
【问题讨论】:
-
你应该寻找为什么你在你的代码中污染了全局命名空间,而不是在这里包装你的代码。
标签: javascript
如果 JavaScript 具有函数级别范围,则将我所有的 JS 代码包装在里面
$(document).ready(function() { ... });
足以防止全局命名空间污染?如果没有,有没有更好的方法可以做到这一点?
【问题讨论】:
标签: javascript
这是一个好的开始,但您还需要确保不要在函数中创建任何全局变量。设置严格模式(使用"use strict";)应该是这样做的大部分。检查所有提及window 的内容。
它确实具有延迟代码执行直到 DOM 准备好的副作用。这并不总是可取的。您可能想改用简单的 IIFE。
【讨论】:
是的,这已经足够了。
由于 JavaScript 具有隐藏成员的函数范围,因此在其中声明的新成员对全局范围是隐藏的。
您需要确保在函数内部声明它们(即var variableName),否则它们将被提升到封闭范围(可能是全局的)。
当然,如果将变量直接分配给全局对象会污染它(只是为了完整性而提及)。
正如Quentin 回答的那样,对use strict; 使用严格模式将确保您没有未声明的变量,否则这些变量会附加到全局上下文。
【讨论】: