我已经阅读了关于JavaScript闭包的大型帖子,我发现的答案之间似乎存在一些差异,并且希望我能得到进一步的澄清。
线程中的一些答案表明当内部函数从外部函数引用变量时会创建一个闭包。
我找到另一个答案,说明这是一个关闭:
var a = 42;
function b() { return a; }
注意没有内/外功能,只是一个功能。人给出的解释是闭包是函数引用外部范围的时候。
所以我的问题是,只有当有两个函数(内部和外部),或者函数引用外部作用域时才创建闭包,外部作用域可能是也可能不是函数(在这种情况下,它只是顶级范围)?
答案 0 :(得分:2)
是的,闭包是一个函数 - any function - 带有对外部作用域变量的引用。
但是,在ES6闭包之前确实只能引用函数作用域(even if there was a block scope)和全局作用域。鉴于全局范围内的闭包非常无聊(在没有词法闭包的语言中你会得到相同的行为),闭包的大多数例子都会有嵌套函数。