【问题标题】:Declaration function inside ( ) [duplicate]()内的声明函数[重复]
【发布时间】:2013-01-05 21:52:50
【问题描述】:

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

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

(function( window, undefined ) {

});

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

【问题讨论】:

标签: javascript jquery


【解决方案1】:

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

对于立即调用的函数,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);
            }
        }
    };
}());

【讨论】:

    【解决方案2】:

    其实第一行是这样的:

    (function( window, undefined ) {
    
    })( window );
    

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

    【讨论】:

      【解决方案3】:

      你打错了,可能是这样写的:

      (function(...) {
      
          // script
      
      })(...);
      

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        function () {}() 导致语法错误。不过,这些都可以:

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

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

        【讨论】:

        • 它甚至不是一个声明,而是一个表达式
        • @Glutamat 我的意思是没有声明,所以没有添加全局函数
        【解决方案5】:

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

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

        对于未定义的部分,这里是一个例子: 黑客只能说;

        undefined = null;

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

        我希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-02
          • 1970-01-01
          • 1970-01-01
          • 2012-06-17
          • 2013-03-05
          • 1970-01-01
          相关资源
          最近更新 更多