JavaScript中的自执行函数

10

这两个函数有什么区别?感谢回复!

函数 #1

var myQuery = (function() {

  (...)

})();

函数 #2

var myQuery = (function() {

  (...)

});
4个回答

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。希望这解释了区别。

2
@Randy:还要注意,在第二种情况下,您不需要周围的括号,因此 var myQuery = function() { … }; 是相同的。 - Marcel Korpel

4

我将简化函数#2,这可能会更好地展示它们之间的差异。

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

在第二个函数中,你是在说“将myQuery分配一个对该函数的引用”。 在第一个函数中,你是在说“将myQuery分配为调用该函数的值”。

0

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

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


0

好的,第一个函数在代码执行到该行时就会被执行,而第二个函数则需要进行执行才能得出其值。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接