【发布时间】:2012-08-01 12:19:19
【问题描述】:
可能重复:
What do parentheses surrounding a JavaScript object/function/class declaration mean?
What does this “(function(){});”, a function inside brackets, mean in javascript?
A Javascript function
我遇到了类似这样的标记:
var something = (function(){
//do stuff
return stuff;
})()
document.ondblclick = function(e) { alert(something(e)) };
我不明白something 变量中的开头( 和关闭)()。
你能解释一下这样写的区别吗?
var something = function(){
//do stuff
return stuff;
};
谢谢!
【问题讨论】:
-
()调用该函数,其他括号是多余的。所以在第二种情况下,something将被分配给函数,在第一种情况下,something将被分配给stuff -
去谷歌,输入“JavaScript 闭包”并开始阅读 :)
-
两者都是函数表达式。第一个看起来像是试图显式地使它成为一个函数表达式。例如,删除
var something =,第一个仍然会运行。但是,当删除边缘的括号时,会抛出一个错误:“函数语句需要一个名称”(假设作者已经考虑过这个,当然!)。第一个立即被调用,所以something引用了stuff变量的值。后者something是对函数的引用。调用时,它引用了stuff变量当时的值。 -
@EliasVanOotegem:这取决于返回的
stuff,参见Is the following JavaScript construct called a Closure? -
@Esailija @RobW 意味着在第一种情况下,每次我使用
something变量时都会执行该函数(因此每次都可能更改),但在第二种情况下,该函数只执行在变量声明中,something总是返回相同的值?
标签: javascript closures