什么是匿名闭包,为什么它与正常闭包不同?

时间:2012-03-10 14:05:57

标签: javascript

我开始阅读:http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

他们提到匿名关闭:

  

这是使一切成为可能的基本结构,而且   真的是JavaScript的最佳功能。我们只是创造   匿名函数,并立即执行。所有的代码   在函数内部运行的是一个闭包,它提供了   在我们的应用程序的整个生命周期中,隐私

(function () {
    // ... all vars and functions are in this scope only
    // still maintains access to all globals
}());
  • 我不明白自动执行匿名会发生什么 函数闭包,这与正常闭包不同 为什么这么特别?
  • 它有什么好处?

2 个答案:

答案 0 :(得分:3)

未在闭包中定义的变量进入窗口变量并且是全局变量。

示例:

var SOME_CONSTANT = 4;

function foo() { 
    var c = SOME_CONSTANT;
    console.log( c );
}

foo();

如果您有此代码,SOME_CONSTANT将对所有文件和代码在内联脚本等内运行是全局的,这可能是不可取的。

您可以使用自调用闭包将变量仅保留在此闭包内:

( function() {
    var SOME_CONSTANT = 4;

    function foo() {
        var c = SOME_CONSTANT;
        console.log( c );
    }

    foo();

} () );

这样,您可以拥有仅对该模块具有全局变量的模块。例如,通过将每个文件的代码包含在这样的匿名函数中。

答案 1 :(得分:1)

除了事实之外,“正常闭合”没有区别,这个功能是立即执行的。