可能重复:
使用 (function(window, document, undefined) { ... })(window, document) 有什么好处?
高级 Javascript:为什么这个函数用括号括起来?
我刚刚检查了 jquery 是如何编写的,然后在它的第一行我看到了这个:
(function( window, undefined ) {
});
我的问题是函数声明在(
and内的含义或原因是什么)
?
可能重复:
使用 (function(window, document, undefined) { ... })(window, document) 有什么好处?
高级 Javascript:为什么这个函数用括号括起来?
我刚刚检查了 jquery 是如何编写的,然后在它的第一行我看到了这个:
(function( window, undefined ) {
});
我的问题是函数声明在(
and内的含义或原因是什么)
?
在您的示例中,我认为括号没有理由。
对于立即调用的函数,Douglas Crockford 推荐并提供了如下代码示例。来源是http://javascript.crockford.com/code.html
当要立即调用函数时,应将整个调用表达式包裹在括号中,以便清楚地生成的值是函数的结果,而不是函数本身。
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);
}
}
};
}());
实际上,第一行是这样的:
(function( window, undefined ) {
})( window );
这是一个立即调用的函数表达式。
你打错了,应该是这样写的:
(function(...) {
// script
})(...);
它用于避免冲突。这是一个自调用函数。由于末尾的括号,它调用了自己。
此函数中定义的所有变量、对象和函数都保留在此函数中。
见: http: //www.ecma-international.org/ecma-262/5.1/#sec-12.4
这只是 ECMAScript(以及 JavaScript)语法的一部分。
您需要括号来立即调用匿名函数。
function () {}()
导致语法错误。但是,这些都可以工作:
(function () {}())
(function () {})()
要点是包装函数的所有内容,以便外部变量不会泄漏到函数中(反之亦然)。它是匿名的,因此也没有添加全局函数声明。
正如 SLaks 已经链接的那样,它是一个自执行功能。对于里面的2个参数是另一个原因,性能和安全性。
性能方面,javascript 会检查自己的变量,否则他会检查他的父母等等。你可以想象,局部变量总是最快的。
对于未定义的部分,这里有一个例子:黑客可以说;
undefined = null;
现在你的代码失败了,并且会有错误和东西。
我希望这会有所帮助。