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

标签 javascript

我找到了这样的两个代码,但不明白它们之间的区别(如果存在的话)。

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

首先:

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

第二个:

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

问题可能很简单,但我不明白 (); 的区别 - 你能解释一下吗?

最佳答案

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

function hello() {
    return "world";
}

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

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

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

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

关于JavaScript 匿名函数有效语法防止全局范围污染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19100615/

相关文章:

javascript - Node.js - setTimeout 回调的触发顺序是否与注册的顺序相同?

javascript - html 中 nodeJS child_process 的样式输出

javascript - URLSearchParams 总是返回空

javascript - 如何使用 puppeteer 下载页面上的图像?

javascript - html5 canvas 中的鼠标交互。画线

javascript - 带组合框的 ExtJS 分页

javascript - scrollTo/localscroll.js 根本不工作

javascript - 如何向 javascript 方法添加多个回调?

javascript - 这段 Javascript 代码是什么导致它在 IE 中正确生成表格?

javascript - 现场 Javascript 不适用于 Electron,但适用于其他任何地方