匿名函数只是一个没有名字的函数;而已。闭包是捕获周围环境状态的函数。
匿名函数不一定需要创建闭包,并且闭包不是仅为匿名函数创建的。
考虑这个假设的反例。考虑一种语言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://stackoverflow.com/questions/220658/what-is-the-difference-between-a-closure-and-a-lambda我的坏 – 2011-02-06 07:18:10