2

我发现了这样两个代码,如果存在的话,我不明白它们之间的区别。

你能解释一下防止全局范围污染的代码有什么区别吗?

第一的:

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

第二:

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

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

4

1 回答 1

4

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

function hello() {
    return "world";
}

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

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

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

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

于 2013-09-30T17:53:49.123 回答