理解js的闭包

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

先来看一个闭包的例子

function a() {
    var num = 1;
    function b(){
        num++;
        console.log(num);
    }
    return b;
}
var temp = a();
temp();
temp();

此时输出结果是2 和3,函数b和a形成了闭包,函数b被保存到外部。

function test() {
    var num = 100;
    function a(){
        num++;
        console.log(num);
    }
    function b(){
        num--;
        console.log(num);
    }
    return [a,b];
}
var myArr = test();
myArr[0]();//101
myArr[1]();//100

函数a、b和test形成闭包,将函数a、b放在数组同时保存到test函数的外部。

function test(){
    var arr = [];
    for(var i =0;i<10;i++){
        arr[i] = function (){
            console.log(i);
        }
    }
    return arr;
}
var myArr = test();
for(var j =0;j<10;j++){
    myArr[j]();
}
输出结果为10个10,只不过控制台看的不是很清楚,可以改写成document.write(i),此时的i的作用域是test()函数,i的结果是10,当内部函数arr执行时输出的也是10.循环输出10次,所以是10个10.


猜你喜欢

转载自blog.csdn.net/cgdogn/article/details/80046309