一. 构成闭包的必要条件有三个
1.外部函数的局部变量被内部函数引用
2.执行外部函数时内部函数立刻执行
3. 通过外部函数访问未被释放的局部变量
二. 使用场景:
1. 为保护变量不受污染
2. 为循环调用时保留局部变量
例子:
function callLater(paramA, paramB, paramC) {
return (function () {
paramA[paramB] = paramC;
});
}
var funcRef = callLater(elStyle, “display”, “none”);
hideMenu = setTimeout(funcRef, 500);
可以调用另一个函数来返回一个内部函数的调用,将那个内部函数对象的引用传递给setTimeout函数。内部函数执行时需要的参数,在调用外部函数时传递给它。setTimeout在执行内部函数时无需传递参数,因为内部函数仍然能够访问外部函数调用时提供的参数
三. 缺点明显, 局部变量由于一直被引用而无法释放,造成内存垃圾。