我对Javascript语法不是很熟悉。任何人都可以掩饰这块的意义吗?出于什么目的?
(function foo() { alert('bar'); })();
提前致谢。
答案 0 :(得分:2)
对我来说这看起来不好(命名一个闭包函数),因为它会导致浏览器不一致。
以下面的代码为例
(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');
})();
答案 1 :(得分:1)
目的是使您正在处理的工作范围超出全球范围。这有助于封装对象并防止它们污染全局池。除了在函数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
答案 2 :(得分:0)
Javascript允许您动态声明函数 - 它们被称为闭包 - 并且在您的示例中在第一组括号之间完成。当您引入第二组括号时,您将调用刚才定义的函数。需要注意的区别是函数声明/定义与该函数的应用之间的区别。
答案 3 :(得分:0)
var tokenizer =(function(){ var id = 0; return function(){ return id ++; }; })();
tokenizer(); // 0
tokenizer(); // 1
tokenizer(); // 2
alert(id); // undefined