(function() {
//do stuff
})();
编辑:我最初认为这个构造被称为闭包——而不是它在闭包中导致结果的效果(可能)——如果变量被捕获。
这与闭包本身的行为没有任何关系——我完全理解这一点,并不是被问到的。
(function() {
//do stuff
})();
编辑:我最初认为这个构造被称为闭包——而不是它在闭包中导致结果的效果(可能)——如果变量被捕获。
这与闭包本身的行为没有任何关系——我完全理解这一点,并不是被问到的。
它是一个立即执行的匿名函数(或更准确地说是一个作用域匿名函数)。
一个的用途是,在其中声明的任何变量和函数都被限定在该函数的范围内,因此对任何全局上下文都是隐藏的(因此您可以获得封装和信息隐藏)。
它是一个匿名函数,但它不是一个闭包,因为您没有对外部范围的引用
我通常称它为“匿名函数的立即调用”。
或者,更简单地说,“函数自调用”。
不,闭包是这样的:
function outer()
{
var variables_local_to_outer;
function inner()
{
// do stuff using variables_local_to_outer
}
return inner;
}
var closure = outer();
闭包保留对返回它的函数的局部变量的引用。
编辑:您当然可以使用匿名函数创建闭包:
var closure = (function(){
var data_private_to_the_closure;
return function() {
// do stuff with data_private_to_the_closure
}
})();
有点儿。但是它并没有真正关闭任何东西,它会立即被调用,所以它实际上只是一个匿名函数。
拿这个代码:
function foo() {
var a = 42;
return function () {
return a;
}
}
var bar = foo();
var zab = bar();
alert(zab);
这里 foo() 返回的函数是一个闭包。它围绕 a 变量关闭。即使 a 似乎早已超出范围,通过调用它来调用闭包仍然会返回值。