gpt4 book ai didi

javascript - 闭包真正指的是什么?

转载 作者:行者123 更新时间:2023-11-28 18:59:05 25 4
gpt4 key购买 nike

我知道如何使用“闭包”...但是闭包这个词实际上指的是什么?

在 MDN 上的定义是它是一个函数。 Here是关于闭包的页面。第一句话是:“闭包是引用独立(自由)变量的函数。”在第一个代码示例中,有一条注释突出显示了闭包函数。然而,第二句话似乎表明闭包实际上是内部函数所在的持久作用域。这就是 this其他堆栈溢出答案也建议(搜索词“持久”)。

那么,它是什么?函数还是持久作用域?

最佳答案

从技术上讲,闭包是持久作用域在函数中如何工作背后的机制 - 换句话说,它是实现。这就是它最初在 Lisp 中的含义。在某些情况下,这仍然是它的意思——只要看看各种 Lisp 方言中闭包的解释,他们几乎都试图用编译器/解释器如何实现闭包来解释它。因为这就是人们用来解释范围的方式。

我第一次遇到对闭包更简单的解释(即解释行为而不是机制)是在 javascript 中。现在越来越多的人已经习惯了闭包的概念,这个词本身的含义已经发展为:

  • 内部函数的捕获范围,允许该函数引用外部函数的变量(这最接近原始含义)

  • 内部函数本身(通常在调用一等函数或 lambda“闭包”的语言中)

  • 闭包捕获的自由变量

我个人更喜欢最后一个含义,因为它捕获了闭包的本质:变量共享的一种形式,有点像全局变量。不过,如果你想迂腐的话,只有第一个含义实际上是技术含义:“闭包”指的是捕获的范围。

关于javascript - 闭包真正指的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32982870/

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