我不是很熟悉JavaScript语法波纹管。任何人都可以为这个街区的感觉遮光吗?出于什么目的?
(function foo() { alert('bar'); })();
在此先感谢。
我不是很熟悉JavaScript语法波纹管。任何人都可以为这个街区的感觉遮光吗?出于什么目的?
(function foo() { alert('bar'); })();
在此先感谢。
Javascript允许您即时声明函数 - 它们被称为闭包 - 并在第一组圆括号之间的示例中完成。当你引入第二组括号时,你就调用了你刚刚定义的那个函数。注意的区别在于函数声明/定义和该函数的应用之间的区别。
其目的是将您正在进行的工作的范围从全局范围移除。这有助于封装对象并防止污染全局池。您全局声明,就包含函数foo()的任何变量将不可用,除了给函数foo()内声明的函数
var GLOBALVAR //this is available to the global document scope
(function foo() {
var FOOVAR //only available within this function
function bar(){
FOOVAR = GLOBALVAR //this will work
}
alert('bar');
})();
FOOVAR = GLOBALVAR //This will not because FOOVAR is out of scope
这看起来像不好的做法,我(命名闭合功能),因为它可以导致浏览器不一致。
看看下面的代码,例如
(function foo() {
alert('bar');
})();
foo();
在Internet Explorer中,您将获得2级警报,因为它实际上创造了功能作为一个名为foo
全局函数。
在Chrome中,它只会提醒一次,foo
没有全局声明,所以你得到一个JavaScript错误foo is not defined
通常你会不会来一个闭合功能
(function() { // notice you don't see foo anymore
alert('bar');
})();
我并不知道命名闭包函数的问题。不是我曾经这样做过,但很高兴知道。 – 2010-06-09 16:58:06
var tokenizer =(function(){ var id = 0; return function(){ return id ++; }; })();
tokenizer(); // 0
tokenizer(); // 1
tokenizer(); // 2
alert(id); // undefined
http://stackoverflow.com/questions/2897987/why-would-one-write-global-code-inside-a-function-definition-call-pair – nico 2010-06-09 16:47:47
和另一个HTTP和:// stackoverflow.com/questions/592396/what-is-the-purpose-of-a-self-executing-function-in-javascript – Anurag 2010-06-09 16:49:38
他的问题与那些不同,因为他在他的封闭功能上有一个名字,创造了一个完整的不同的问题集(尽管他可能会也可能没有这样的意思) – 2010-06-09 16:54:24