JavaScript中的自调用函数

JavaScript中的自调用函数,javascript,closures,Javascript,Closures,这些函数之间有什么区别?谢谢回复 功能#1 var myQuery = (function() { (...) })(); 功能#2 var myQuery = (function() { (...) }); 第一个是自调用函数,使用空参数列表调用。myQuery的值将是此函数返回的值 第二个是匿名函数的简单赋值。这个函数中没有调用。我将简化函数#2,也许这样可以更好地显示它们之间的差异 var myQuery = function(){ (...) }; 在函数#2中,您

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

功能#1

var myQuery = (function() {

  (...)

})();
功能#2

var myQuery = (function() {

  (...)

});

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


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

我将简化
函数#2
,也许这样可以更好地显示它们之间的差异

var myQuery = function(){ (...) };
在函数#2中,您说的是“为myQuery分配一个对此函数的引用。”
在函数#1中,您说的是“将myQuery调用的值赋给此函数。”

在第一种情况下,您是自调用函数文本,并将调用的值赋给变量
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(){…}将是相同的。