【发布时间】:2010-10-27 16:45:07
【问题描述】:
这些函数有什么区别?谢谢回复!
功能#1
var myQuery = (function() {
(...)
})();
功能 #2
var myQuery = (function() {
(...)
});
【问题讨论】:
标签: javascript closures
这些函数有什么区别?谢谢回复!
功能#1
var myQuery = (function() {
(...)
})();
功能 #2
var myQuery = (function() {
(...)
});
【问题讨论】:
标签: javascript closures
在第一种情况下,您自调用一个函数字面量并将调用的值分配给变量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。希望这可以解释差异。
【讨论】:
var myQuery = function() { … }; 将是相同的。
我将简化 Function #2,也许这样可以更好地显示差异。
var myQuery = function(){ (...) };
在函数 #2 中,您说的是“为 myQuery 分配对此函数的引用”。 在函数 #1 中,您说的是“将调用此函数的值分配给 myQuery。”
【讨论】:
第一个是自调用函数,使用空参数列表调用。 myQuery 的值就是这个函数返回的值。
第二个是匿名函数的简单赋值。这个没有调用。
【讨论】:
第一个函数在行通过时执行,第二个函数必须执行才能获取值
【讨论】: