Possible Duplicates:
What is Closures/Lambda in PHP or Javascript in layman terms?
What is the difference between a 'closure' and a '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);
}
关于closures - 闭包与匿名函数(区别?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4912116/