闭包是否必须具有外部函数,或者它可以仅引用外部作用域



我已经阅读了关于JavaScript闭包的巨型线程,我找到的答案之间似乎有一些差异,并希望我能得到一些进一步的澄清。

线程中的一些答案指出,当内部函数引用外部函数中的变量时,会创建闭包。

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

var a = 42;
function b() { return a; }

请注意,没有内部/外部函数,而只是一个函数。该人给出的解释是,闭包是指函数引用外部作用域。

所以我的问题是,只有当有两个函数(

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

是的,闭包是一个函数 - 任何函数 - 引用外部作用域中的变量。

然而,在 ES6 闭包之前,确实只能引用函数作用域(即使存在块作用域)和全局作用域。鉴于全局范围内的闭包非常无聊(在没有词法闭包的语言中你会得到相同的行为),大多数闭包示例都将具有嵌套函数。

最新更新