Javascript 什么是匿名闭包,为什么它不同于普通闭包?

Javascript 什么是匿名闭包,为什么它不同于普通闭包?,javascript,Javascript,我开始读到: 它们指的是匿名关闭: ( function() { var SOME_CONSTANT = 4; function foo() { var c = SOME_CONSTANT; console.log( c ); } foo(); } () ); 这是使这一切成为可能的基本结构 这确实是JavaScript最好的特性。我们将简单地创建 一个匿名函数,并立即执行它。所有代码 在函数内部运行的函数存在于闭包中,闭包

我开始读到:

它们指的是匿名关闭:

( function() {
    var SOME_CONSTANT = 4;

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

    foo();

} () );
这是使这一切成为可能的基本结构 这确实是JavaScript最好的特性。我们将简单地创建 一个匿名函数,并立即执行它。所有代码 在函数内部运行的函数存在于闭包中,闭包提供 隐私状态在应用程序的整个生命周期内

  • 我不明白在一个自动执行的匿名者身上会发生什么 函数闭包方式,即不同于正常闭包和 为什么它这么特别
  • 它的好处是什么

除了立即执行此函数之外,与“正常闭包”没有区别。

除了立即执行此函数之外,与“正常闭包”没有区别。

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

例如:

var SOME_CONSTANT = 4;

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

foo();
如果你有这段代码,一些常量对于所有文件和内联脚本中运行的代码都是全局的,这可能不是你想要的

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

( function() {
    var SOME_CONSTANT = 4;

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

    foo();

} () );

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

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

例如:

var SOME_CONSTANT = 4;

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

foo();
如果你有这段代码,一些常量对于所有文件和内联脚本中运行的代码都是全局的,这可能不是你想要的

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

( function() {
    var SOME_CONSTANT = 4;

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

    foo();

} () );

这样,您就可以拥有只对该模块具有全局变量的模块。例如,将每个文件的代码封装在这样一个匿名函数中。

正常关闭对您来说到底意味着什么?“我不明白会发生什么……这与正常关闭不同”没有什么不同。这只是一个一次性使用的功能。唯一的“好处”是没有向封闭范围添加变量。好的,thanx,我想我的问题不够清楚,但我得到了@abresasy想要的答案。你的问题非常清楚。人们只是懒得去读它。有一个似乎明白了。正常的结束对你来说到底意味着什么?“我不明白发生了什么……这与正常的结束不同”没有什么不同。这只是一个一次性使用的功能。唯一的“好处”是没有向封闭范围添加变量。好的,thanx,我想我的问题不够清楚,但我得到了@abresasy想要的答案。你的问题非常清楚。人们只是懒得去读它。这似乎是有道理的。请在否决投票时发表评论,以便我知道我做错了什么:)只需补充一点,这一点特别重要的一种情况是,当开发javascript时,它将被放置在您几乎没有控制权或没有控制权的环境中。如果在窗口对象上使用变量,它们可能会被覆盖,从而破坏代码。匿名函数将保护您在该附件中声明的所有变量。您尚未回答此问题。询问者已经知道你所解释的一切。@Shane补充的内容对我很有帮助。@abresas,我在第二个示例中添加了
foo()
,因为我们也想执行它,对吗?@不是吗,那么我可能误解了这个问题。很高兴听到至少这些例子和评论起到了帮助作用。没错!请在您否决投票时发表评论,以便我知道我做错了什么:)只需补充一点,这一点特别重要的一种情况是,当开发javascript时,它将被放置在您几乎无法控制或无法控制的环境中。如果在窗口对象上使用变量,它们可能会被覆盖,从而破坏代码。匿名函数将保护您在该附件中声明的所有变量。您尚未回答此问题。询问者已经知道你所解释的一切。@Shane补充的内容对我很有帮助。@abresas,我在第二个示例中添加了
foo()
,因为我们也想执行它,对吗?@不是吗,那么我可能误解了这个问题。很高兴听到至少这些例子和评论起到了帮助作用。没错!