【问题标题】:Self-Invoking Functions in JavaScriptJavaScript 中的自调用函数
【发布时间】:2010-10-27 16:45:07
【问题描述】:

这些函数有什么区别?谢谢回复!

功能#1

var myQuery = (function() {

  (...)

})();

功能 #2

var myQuery = (function() {

  (...)

});

【问题讨论】:

    标签: javascript closures


    【解决方案1】:

    在第一种情况下,您自调用一个函数字面量并将调用的值分配给变量myQuery

    在第二种情况下,您将引用分配给已定义的匿名函数。在这里,myQuery 就像一个指针或一个函数的引用。

    为了更好地说明这一点。

    var myQuery = (function() {
       return "Hello";
    })();
    

    在这种情况下,myQuery 包含值 Hello。现在,如果你有:

    var myQuery = (function() {
       return "Hello";
    });
    

    myQuery 包含对该函数的引用。如果您在 Firebug 中使用 console.log 输出此值,您将看到 function()。这个参考是你可以传递甚至调用的东西。所以:

    var myQuery = (function() {
       return "Hello";
    });
    
    var value = myQuery();
    

    现在,value 将包含 Hello。希望这可以解释差异。

    【讨论】:

    • @Randy:另请注意,在第二种情况下,您不需要括号,因此var myQuery = function() { … }; 将是相同的。
    【解决方案2】:

    我将简化 Function #2,也许这样可以更好地显示差异。

    var myQuery = function(){ (...) };
    

    在函数 #2 中,您说的是“为 myQuery 分配对此函数的引用”。 在函数 #1 中,您说的是“将调用此函数的值分配给 myQuery。”

    【讨论】:

      【解决方案3】:

      第一个是自调用函数,使用空参数列表调用。 myQuery 的值就是这个函数返回的值。

      第二个是匿名函数的简单赋值。这个没有调用。

      【讨论】:

        【解决方案4】:

        第一个函数在行通过时执行,第二个函数必须执行才能获取值

        例如:http://jsfiddle.net/yVrwX/

        【讨论】:

          猜你喜欢
          • 2011-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-17
          相关资源
          最近更新 更多