Javascript:是为所有变量创建闭包,还是仅为内部函数可能使用的闭包?

时间:2014-12-04 15:05:50

标签: javascript closures

var foo = 'outer';
function outer() {
    var foo = 'closure';
    var bar = 'baz';
    return function inner() {
        console.log(foo);
    }   
}

我了解foo将被关闭,因为inner()将需要它。

bar也会关闭吗?它位于inner()的范围内,但inner()未使用它。

2 个答案:

答案 0 :(得分:1)

单独的特定变量不会被转发。创建闭包时,整个范围将被转发。在这种情况下,foobar以及该范围内的任何变量都将在inner函数中提供。

答案 1 :(得分:1)

理论上,整个父作用域被关闭,包括变量foobar以及对其父作用域的引用:函数inner 可能需要它。至少它是如何被推测的。在实践中,引擎可以自由地优化它并垃圾收集未引用的所有内容 - 例如,V8 does this