闭包及例题

当内部函数被保存到外部时,将会产生闭包。闭包会导致原有作用域链不会释放,造成内存泄露。

闭包的作用:


闭包的防范:


//闭包实现累加器

 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();

猜你喜欢

转载自blog.csdn.net/nysai/article/details/80512505
今日推荐