Javascript 闭包是否必须有一个外部函数,或者它只能引用一个外部作用域?

Javascript 闭包是否必须有一个外部函数,或者它只能引用一个外部作用域?,javascript,Javascript,我已经阅读了关于JavaScript闭包的mega thread,在我找到的答案之间似乎存在一些差异,我希望能够得到进一步的澄清 线程中的一些答案表示,当内部函数引用外部函数的变量时,将创建一个闭包 我找到了另一个答案,说明这是一个终结: var a = 42; function b() { return a; } 请注意,没有内部/外部函数,只有一个函数。person给出的解释是,闭包是指函数引用外部作用域时的闭包 所以我的问题是,只有当有两个函数(内部和外部)时,或者当一个函数引用外部作

我已经阅读了关于JavaScript闭包的mega thread,在我找到的答案之间似乎存在一些差异,我希望能够得到进一步的澄清

线程中的一些答案表示,当内部函数引用外部函数的变量时,将创建一个闭包

我找到了另一个答案,说明这是一个终结:

var a = 42;

function b() { return a; }
请注意,没有内部/外部函数,只有一个函数。person给出的解释是,闭包是指函数引用外部作用域时的闭包


所以我的问题是,只有当有两个函数(内部和外部)时,或者当一个函数引用外部作用域时,才会创建闭包,外部作用域可能是函数,也可能不是函数(在这种情况下,它只是顶级作用域)?

是的,闭包是函数,引用外部作用域中的变量


然而,在ES6之前,闭包实际上只能引用函数作用域()和全局作用域。考虑到全局范围内的闭包是相当无聊的闭包(在没有词汇闭包的语言中,您会得到相同的行为),大多数闭包示例都有嵌套函数。

是的,闭包是一个函数,引用外部范围内的变量

然而,在ES6之前,闭包实际上只能引用函数作用域()和全局作用域。考虑到全局范围内的闭包是非常无聊的闭包(在没有词汇闭包的语言中也会有相同的行为),大多数闭包示例都会有嵌套函数