您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?
我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.
我知道这里和这里关于闭包的好帖子,但似乎都没有解决我想到的特殊情况.最好用代码证明这个问题:
function foo() {
var x = {};
var y = "whatever";
return function bar() {
alert(y);
};
}
var z = foo();
Run Code Online (Sandbox Code Playgroud)
引用y中bar调用关闭,所以只要我保持z周围的垃圾收集器不会清理y.问题是 - 会发生什么x?即使它没有被引用,它是否也被该闭包持有?垃圾收集器是否会看到没有参考x并清理它?或者只要我抓住它就会x坚持y下去z?(理想的答案是引用ECMA规范.)
javascript closures garbage-collection memory-management ecmascript-5