gpt4 book ai didi

closures - 闭包与匿名函数(区别?)

转载 作者:行者123 更新时间:2023-12-03 05:29:27 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com