声明功能里面()

时间:2013-01-22 15:45:23

标签: javascript jquery

  

可能重复:
  What advantages does using (function(window, document, undefined) { … })(window, document) confer?
  Advanced Javascript: Why is this function wrapped in parentheses?

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

(function( window, undefined ) {

});

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

5 个答案:

答案 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和东西。

我希望这有用。