关闭与匿名功能(区别?)

可能重复:
PHP或Javascript中的Closures / Lambda是通俗的术语?
'封'和'lambda'有什么区别?

嗨,

我一直无法找到明确解释封闭和匿名函数之间差异的定义。

我所看到的大多数参考文献清楚地表明它们是不同的“事物”,但我似乎无法理解为什么。

有人可以为我简化它吗? 这两种语言功能之间的具体区别是什么? 在哪些情况下哪个更合适?


匿名函数只是一个没有名字的函数; 而已。 闭包是捕获周围环境状态的函数。

匿名函数不一定需要创建闭包,并且闭包不是仅为匿名函数创建的。

考虑这个假设的反例。 考虑一种语言Foo,它不支持闭包但支持匿名函数。 这种语言可能无法编译或为下面的代码抛出错误,因为“greeting”未在内部函数的范围内定义。 它是匿名的这一事实是无关紧要的。

function outer() {
    var greeting = "hello ";

    (function(name) {
        alert(greeting + name);
    })("John Doe");
}

现在让我们考虑一个支持闭包的实际语言 - JavaScript。 以上面的例子,但这次命名内部函数给出:

function outer() {
    var greeting = "hello ";

    (function inner(name) {
        alert(greeting + name);
    })("John Doe");
}

尽管内部函数不再是匿名的,但它仍然捕获周围环境的状态。

闭包提供了非常需要的便利,否则我们会传递函数的每个依赖项作为参数。

function outer() {
    var greeting = "hello ";

    (function(name, greeting) {
        alert(greeting + name);
    })("John Doe", greeting);
}
链接地址: http://www.djcxy.com/p/1461.html

上一篇: Closure vs Anonymous function (difference?)

下一篇: How to remove a lambda event handler