【发布时间】:2010-11-11 12:34:22
【问题描述】:
我正在阅读一些关于闭包的帖子,并且到处都看到了这个,但是没有明确的解释它是如何工作的 - 每次我被告知要使用它...:
// Create a new anonymous function, to use as a wrapper
(function(){
// The variable that would, normally, be global
var msg = "Thanks for visiting!";
// Binding a new function to a global object
window.onunload = function(){
// Which uses the 'hidden' variable
alert( msg );
};
// Close off the anonymous function and execute it
})();
好的,我看到我们将创建新的匿名函数,然后执行它。所以在那之后这个简单的代码应该可以工作(并且确实可以):
(function (msg){alert(msg)})('SO');
我的问题是这里发生了什么样的魔法?我在写的时候是这么想的:
(function (msg){alert(msg)})
然后会创建一个新的未命名函数,例如 function ""(msg) ...
但是为什么这不起作用呢?
(function (msg){alert(msg)});
('SO');
为什么要在同一行?
你能指点我一些帖子或给我一个解释吗?
【问题讨论】:
-
在其他语言中,如果您想查看所涉及的低级结构,这些称为函数指针或委托。
-
你有一个 ;在第一行
-
既然您知道它是如何工作的......不要使用它。我们应该stop writing anonymous functions。只需再添加几个字符,我们就可以给我们的函数一个真实的名称,并使调试 Javascript 代码变得更加容易!
-
(function (msg){alert(msg)})('SO');行完全独立运行。它与您之前发布的其他匿名函数无关。这是两个完全独立的匿名函数。你必须立即调用一个匿名函数,因为它没有名字,以后也不能被引用。
标签: javascript anonymous-function iife