var foo = 'outer';
function outer() {
var foo = 'closure';
var bar = 'baz';
return function inner() {
console.log(foo);
}
}
我了解foo
将被关闭,因为inner()
将需要它。
但bar
也会关闭吗?它位于inner()
的范围内,但inner()
未使用它。
答案 0 :(得分:1)
单独的特定变量不会被转发。创建闭包时,整个范围将被转发。在这种情况下,foo
和bar
以及该范围内的任何变量都将在inner
函数中提供。
答案 1 :(得分:1)
理论上,整个父作用域被关闭,包括变量foo
和bar
以及对其父作用域的引用:函数inner
可能需要它。至少它是如何被推测的。在实践中,引擎可以自由地优化它并垃圾收集未引用的所有内容 - 例如,V8 does this。