Max*_*ich 67 closures anonymous-function
可能的重复:
什么是PHP或Javascript中的Closures/Lambda外行术语?
'闭包'和'lambda'有什么区别?
嗨,
我一直无法找到一个明确解释闭包和匿名函数之间差异的定义.
我看到的大多数参考文献清楚地指出它们是不同的"事物",但我似乎无法理解为什么.
有人可以帮我简化一下吗?这两种语言功能之间有哪些具体差异?在哪些情况下哪一个更合适?
Anu*_*rag 93
匿名函数只是一个没有名字的函数; 而已.闭包是捕捉周围环境状态的功能.
匿名函数不一定需要创建闭包,并且不会仅为匿名函数创建闭包.
考虑这个假设的反例.考虑一种语言Foo,它不支持闭包但支持匿名函数.这种语言可能无法编译或为下面的代码抛出错误,因为"greeting"未在内部函数的范围内定义.它是匿名的这一事实无关紧要.
function outer() {
var greeting = "hello ";
(function(name) {
alert(greeting + name);
})("John Doe");
}
Run Code Online (Sandbox Code Playgroud)
我们现在考虑一种支持闭包的实际语言--JavaScript.采用与上面相同的例子,但这次命名内部函数给出:
function outer() {
var greeting = "hello ";
(function inner(name) {
alert(greeting + name);
})("John Doe");
}
Run Code Online (Sandbox Code Playgroud)
虽然内部函数不再是匿名的,但它仍然从周围环境中捕获状态.
闭包提供了非常必要的便利,否则我们会将函数的每个依赖项作为参数传递.
function outer() {
var greeting = "hello ";
(function(name, greeting) {
alert(greeting + name);
})("John Doe", greeting);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22444 次 |
| 最近记录: |