以下JavaScript构造是否称为Closure?

时间:2010-10-06 12:53:50

标签: javascript scope nomenclature

(function() {

  //do stuff

})();
编辑:我原本认为这个构造被称为闭包 - 不是它在闭包中导致(可能)导致的效果 - 如果捕获了变量。

这与封闭本身的行为没有任何关系 - 我完全理解这一点,而不是被问到的内容。

5 个答案:

答案 0 :(得分:2)

这是一个匿名函数(或者更确切地说是scoped anonymous function),可以立即执行。

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

或者更简单地说,“功能自我调用。”

答案 3 :(得分: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
    }

})();

答案 4 :(得分:1)

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

拿这段代码:

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

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

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