我读过这篇优秀作品: How do JavaScript closures work?
但我还有疑问......
StackOverflow标签定义"闭包" as" Closure是一个第一类函数,它引用(关闭)来自定义它的作用域的变量。 如果闭包在其定义范围结束后仍然存在,则它关闭的变量将继续存在"。
当我的函数以返回结束时,是否会删除其中定义的所有变量并释放内存分配?在我看来,当一个人可以回答是或否时,就存在条件。
是的,我知道记忆充足且自由,但这不是我的问题。
考虑一个基于Intranet的应用程序,ajax的数据在一个工作日内后退和前进。由于客户收到数据,按摩,不再需要,因此可以免除。糟糕的编程技术可能导致不再是用户或需要的数据累积(或者更糟糕的是,使用的数据不同步)。
阅读上面关闭的文章告诉我,函数中的一些变量仍然可以从函数范围之外引用。我猜我需要多次重读封文,因为我可能还没有完全理解它。
有人可以分享变量继续存在的例子吗?
并且......如果在每个函数开始时我声明我的变量,并且在使用&#34之前返回true,那么我是否会获益?"如果我将变量重新赋值为null?
所有帮助表示赞赏......
答案 0 :(得分:0)
如果我错了,请纠正我,但我不认为
函数中的一些变量仍然可以从函数范围外引用
是真的。
闭包记住函数调用的上下文,并将相关变量(即this
等)绑定到闭包的范围。如果这是正确的,那么再次调用闭包将导致旧变量'垃圾收集的价值,你不必担心内存浪费或不同步数据。
答案 1 :(得分:0)
IBar
将存在于IIFE num
之外的a
函数中,并返回c
a

答案 2 :(得分:0)
当你从一个函数return true
时,你没有一个闭包。从函数返回函数时有一个闭包,如下所示:
function makeAdder( firstNumToAdd ){
return function( secondNumToAdd ){
return mainNumToAdd + secondNumToAdd;
}
}
var add3 = makeAdder(3);
var seven = add3(4);
在上面的示例中,变量firstNumToAdd
虽然范围是函数makeAdder
,但内部函数始终可以访问它,即使函数在执行行var add3 = makeAdder(3);
<之后退出/ p>
答案 3 :(得分:0)
obj = {
func: function(){
var test = 'preserved value';
this.func2 = function(){
console.log(test);
};
}
};
obj.func();
obj.func2(); //'preserved value'
obj.func = undefined;
obj.func2(); //'preserved value'
如您所见,即使在完全吹走原始范围(func
)后,封闭范围仍保留test
var。