4

可能重复:
使用 (function(window, document, undefined) { ... })(window, document) 有什么好处?
高级 Javascript:为什么这个函数用括号括起来?

我刚刚检查了 jquery 是如何编写的,然后在它的第一行我看到了这个:

(function( window, undefined ) {

});

我的问题是函数声明在(and内的含义或原因是什么)

4

5 回答 5

4

在您的示例中,我认为括号没有理由。

对于立即调用的函数,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);
            }
        }
    };
}());
于 2013-01-22T15:49:48.340 回答
2

实际上,第一行是这样的:

(function( window, undefined ) {

})( window );

这是一个立即调用的函数表达式。

于 2013-01-22T15:49:12.837 回答
1

你打错了,应该是这样写的:

(function(...) {

    // script

})(...);

它用于避免冲突。这是一个自调用函数。由于末尾的括号,它调用了自己。

此函数中定义的所有变量、对象和函数都保留在此函数中。

于 2013-01-22T15:49:19.670 回答
1

见: http: //www.ecma-international.org/ecma-262/5.1/#sec-12.4

这只是 ECMAScript(以及 JavaScript)语法的一部分。

您需要括号来立即调用匿名函数。

function () {}()导致语法错误。但是,这些都可以工作:

(function () {}())
(function () {})()

要点是包装函数的所有内容,以便外部变量不会泄漏到函数中(反之亦然)。它是匿名的,因此也没有添加全局函数声明。

于 2013-01-22T15:52:05.843 回答
0

正如 SLaks 已经链接的那样,它是一个自执行功能。对于里面的2个参数是另一个原因,性能和安全性。

性能方面,javascript 会检查自己的变量,否则他会检查他的父母等等。你可以想象,局部变量总是最快的。

对于未定义的部分,这里有一个例子:黑客可以说;

undefined = null;

现在你的代码失败了,并且会有错误和东西。

我希望这会有所帮助。

于 2013-01-22T15:55:35.103 回答