JavaScript匿名函数有效语法防止全局范围污染?

时间:2013-09-30 17:52:09

标签: javascript

我找到了这两个代码,如果存在则不理解它们之间的区别。

您能否解释一下防止全球范围污染的代码之间的区别。

首先:

(function() {
var x = 1;
// thousand of lines here
}(window));

第二

(function() {
var x = 1; 
// thousand of lines here
})(window);

问题可能是微不足道的,但我不明白正在做什么(); - 你能解释一下吗?

1 个答案:

答案 0 :(得分:4)

当JavaScript解析器在行的开头读取function标记时,它假定它是一个函数声明,即

function hello() {
    return "world";
}

如果之后没有看到名称,则表示语法错误。括号使上下文成为表达式而不是语句/声明,这意味着需要函数文字。

有趣的事实:当然,您不需要括号来强制表达式上下文。一元运算符也会起作用,例如

!function() {
    var x = 1;
}();

哦,你走了,改变了问题。新的答案是:它们完全相同,有点像5 + (4 * 3)(5 + 4 * 3),除非更不重要,因为它们或多或少具有相同的可读性。