当内部函数被保存到外部时,将会产生闭包。闭包会导致原有作用域链不会释放,造成内存泄露。
闭包的作用:
闭包的防范:
//闭包实现累加器
function add() {
var count = 0;
function demo() {
count ++;
document.write(count);
}
return demo;
}
var counter = add();
counter();
counter();
counter();
counter();
counter();
counter();
counter();
//例题1 输出为0
function a() { function b() { var bb = 234; aa = 0; } var aa = 123; b(); document.write(aa); } var glob = 100; a();
//例题2 输出为123
function a() { function b() { var bbb = 234; document.write(aaa); } var aaa = 123; return b;//将b返回,使得b在a销毁时自己AO时,继续存在 } var glob = 100; var demo = a(); demo();
//例题3 输出为101 102
function a() { var num = 100; function b() { num ++; document.write(num); } return b; } var demo = a(); demo(); demo();
//例题4 输出为101 100
function test() { var num = 100; function a() { num ++; document.write(num); } function b() { num --; document.write(num); } return [a,b]; } var myArr = test(); myArr[0](); myArr[1]();
//例题5 输出i am eating banana
function eater() { var food = ""; var obj = { eat : function () { document.write("i am eating" + food); food = ""; }, push : function (myFood) { food = myFood; } } return obj; } var eater1 = eater(); eater1.push('banana'); eater1.eat();