可能重复:
What advantages does using (function(window, document, undefined) { … })(window, document) confer?
Advanced Javascript: Why is this function wrapped in parentheses?
我刚刚检查了如何编写jquery,然后在第一行我看到了:
(function( window, undefined ) {
});
我的问题是函数声明在(
和)
中的含义或原因是什么?
答案 0 :(得分:3)
在你的例子中,我看不出括号的原因。
对于立即调用的函数,Douglas Crockford建议并提供如下代码示例。来源是http://javascript.crockford.com/code.html
当要立即调用函数时,整个调用 表达应该用parens包裹,以便明确表示 产生的价值是功能的结果,而不是 功能本身。
var collection = (function () {
var keys = [], values = [];
return {
get: function (key) {
var at = keys.indexOf(key);
if (at >= 0) {
return values[at];
}
},
set: function (key, value) {
var at = keys.indexOf(key);
if (at < 0) {
at = keys.length;
}
keys[at] = key;
values[at] = value;
},
remove: function (key) {
var at = keys.indexOf(key);
if (at >= 0) {
keys.splice(at, 1);
values.splice(at, 1);
}
}
};
}());
答案 1 :(得分:2)
实际上,第一行是这样的:
(function( window, undefined ) {
})( window );
是一个立即调用的函数表达式。
答案 2 :(得分:1)
你键入错了,可能写得:
(function(...) {
// script
})(...);
用于避免冲突。这是一个自我调用的功能。由于最后的括号,它会自行调用。
此函数中定义的所有变量,对象和函数都保留在此函数中。
答案 3 :(得分:1)
请参阅:http://www.ecma-international.org/ecma-262/5.1/#sec-12.4
这只是ECMAScript(以及JavaScript)语法的一部分。
你需要parens立即调用匿名函数。
function () {}()
会导致语法错误。但是,这些都可以起作用:
(function () {}())
(function () {})()
重点是包装所有函数的内容,以便外部变量不会泄漏到函数中(反之亦然)。它是匿名的,因此也没有添加全局函数声明。
答案 4 :(得分:0)
由于SLaks已经联系起来,它是一个自动执行功能。 对于内部的2个参数是另一个原因,性能和安全性。
表现明智,javascript会调查自己的变量,否则他会检查他的父母等等。 你可以想象,局部变量总是最快的。
对于未定义的部分,这是一个例子: 黑客可以说;
undefined = null;
现在你的代码失败了,并且会有bug和东西。
我希望这有用。