3
(function() {

  //do stuff

})();

编辑:我最初认为这个构造被称为闭包——而不是它在闭包中导致结果的效果(可能)——如果变量被捕获。

这与闭包本身的行为没有任何关系——我完全理解这一点,并不是被问到的。

4

5 回答 5

3

它是一个立即执行的匿名函数(或更准确地说是一个作用域匿名函数)。

一个的用途是,在其中声明的任何变量和函数都被限定在该函数的范围内,因此对任何全局上下文都是隐藏的(因此您可以获得封装和信息隐藏)。

于 2010-10-06T12:56:14.413 回答
2

它是一个匿名函数,但它不是一个闭包,因为您没有对外部范围的引用

http://www.jibbering.com/faq/notes/closures/

于 2010-10-06T12:59:14.593 回答
1

我通常称它为“匿名函数的立即调用”。

或者,更简单地说,“函数自调用”。

于 2010-10-06T12:55:45.457 回答
1

不,闭包是这样的:

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
    }

})();
于 2010-10-06T13:02:09.970 回答
1

有点儿。但是它并没有真正关闭任何东西,它会立即被调用,所以它实际上只是一个匿名函数。

拿这个代码:

function foo() {
    var a = 42;
    return function () {
        return a;
    }
}

var bar = foo();
var zab = bar();
alert(zab);

这里 foo() 返回的函数是一个闭包。它围绕 a 变量关闭。即使 a 似乎早已超出范围,通过调用它来调用闭包仍然会返回值。

于 2010-10-06T13:04:11.370 回答