我可以使用$(document).ready(function(){...});防止全局命名空间污染?

时间:2017-05-15 10:20:30

标签: javascript

如果JavaScript具有功能级别范围,则将所有JS代码包装在

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

足以防止全局命名空间污染?如果没有,我有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

这是一个好的开始,但您还需要确保不在函数中创建任何全局变量。设置严格模式(使用CircleMenu.java)应该大部分都是这样做的。检查每一个"use strict";的提及将继续进行。

在DOM准备好之前,它会产生延迟执行代码的副作用。这并不总是令人满意的。您可能想要使用简单的IIFE。

答案 1 :(得分:1)

是的,这已足够了。

因为JavaScript具有隐藏成员的功能范围,所以在其中声明的新成员将隐藏在全局范围内。

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

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

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