2017-04-20 42 views
0

我们知道JavaScript Closure会将所有变量保存在其作用域中,还是只保存那些闭包?

function foo() { 
    var x = 10; 
    var y = 20; 
    function bar() { 
    return x + 1; 
    } 
    bar(); // 11 
} 

功能bar创建一个闭包,并保存x参考。

但是变量y呢?关闭bar会创建它的参考吗?我在Chrome开发工具中试过,并且在[[Scopes]]字段中只显示x,没有y。但我找不到任何有关这方面的文章。

这是否意味着封闭创建只会选择它需要保存的内容?

+1

你问根据规范应该发生什么或不同的引擎如何实现闭包? –

+0

http://stackoverflow.com/questions/32325223/over-how-much-of-its-enclosing-scope-does-a-javascript-closure-close – nnnnnn

+0

为什么“bar”会保存对“y”的引用? – guest271314

回答

0

作用域被链接在一起,当无法找到引用时,它将使用父作用域进行检查。这个问题之前有答案,你可以在这里参考: Scope Chain in Javascript