我想深入了解关闭java脚本的概念。Javascript关闭和堆栈展开
function foo(){
let temp = 5;
let bar = function _bar(){
console.log('temp:=', temp);
}
return bar;
}
let ref2Bar = foo();
ref2Bar();
o/p:
temp:=5
从上面的示例代码片段中,bar()与foo()更接近。 ref2Bar得到bar()的引用并从全局范围执行它可以访问foo()的词法范围。
现在我来自堆栈缠绕& un-winding东西。当foo()完成时,应该弹出堆栈,但由于bar()的引用在该文件的生命周期中处于活动状态,所以它听起来像foo范围仍然可以访问。我很想知道这是如何处理的。另外,如果有更多的关闭,会有一个公平的机会跑出内存?
您需要多少封闭内存才能用完?我假设有十几二十个。你打算创建多少个?当所有对引用的引用超出范围时,封闭本身也会被销毁,所以由您决定不保留不需要的引用。 – tadman
你有这个措词后退 - 'foo'是'bar'上的闭包,因为'foo'环绕它来创建外部范围。但你似乎正在考虑正确的范围。 –
@DanLowe:没有,正确的术语确实是'_bar'关闭了'foo'的词法范围(包含'temp'和'bar'),因此是闭包。 – Bergi