JavaScript中的自调用函数

时间:2010-10-27 16:45:07

标签: javascript closures

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

功能#1

var myQuery = (function() {

  (...)

})();

功能#2

var myQuery = (function() {

  (...)

});

4 个答案:

答案 0 :(得分:9)

在第一种情况下,您自行调用函数文字并将调用的值赋给变量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。希望这能解释不同之处。

答案 1 :(得分:4)

我会简化Function #2,也许这会更好地显示差异。

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

第一个函数在传递行时执行,第二个函数必须执行才能获得值

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