closures与匿名函数(区别?)

可能重复:
PHP或JavaScript中的Closures / Lambda是什么?
'封'和'lambda'有什么区别?

嗨,

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

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

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

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

匿名函数不一定需要创build闭包,闭包也不是仅为匿名函数创build的。

考虑这个假设的反例。 考虑一个不支持闭包但支持匿名函数的语言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不再是匿名的,但它仍然从周围的环境中捕捉到状态。

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

 function outer() { var greeting = "hello "; (function(name, greeting) { alert(greeting + name); })("John Doe", greeting); }