JavaScript中的自调用函数

Ran*_*nec 10 javascript closures

这些功能有什么区别?谢谢你的答复!

功能#1

var myQuery = (function() {

  (...)

})();
Run Code Online (Sandbox Code Playgroud)

功能#2

var myQuery = (function() {

  (...)

});
Run Code Online (Sandbox Code Playgroud)

Viv*_*ath 9

在第一种情况下,您将自行调用函数文本并将调用的值赋给变量myQuery.

在第二种情况下,您将分配对已定义的匿名函数的引用.这里的myQuery行为类似于指针或对函数的引用.

为了更好地说明这一点

var myQuery = (function() {
   return "Hello";
})();
Run Code Online (Sandbox Code Playgroud)

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

var myQuery = (function() {
   return "Hello";
});
Run Code Online (Sandbox Code Playgroud)

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

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

var value = myQuery();
Run Code Online (Sandbox Code Playgroud)

现在,value将包含Hello.希望这能解释不同之处.

  • @Randy:另请注意,在第二种情况下,您不需要周围的括号,因此`var myQuery = function(){...};`将是相同的. (2认同)