五、闭包
JS有两链一包的说法,两链是作用域链和原型链,一包就是闭包。
 观察上述代码,调用a函数之后,会在内存中形参红色的区域;另外将a的返回值赋值给了bb,后续垃圾回收机制并不知道bb是否有用,也就是红色内存中的b函数是否有用。所以垃圾回收机制并不会回收红色的区域。
 bb ==== b
 不知道bb有没有用,也就是不知道b是否有用。所以垃圾回收机制不会清除内存。
 这种情形就是闭包,有些时候专门把内部函数b叫做闭包函数。
 闭包的特点:
 闭包会造成内存不被释放;
 闭包使得函数外部可以访问内部的变量。
5.2、闭包应用
每隔1秒,依次输出12345;
    //循环所用的时间,可以忽略不计。
   for(var i=1; i<=5; i++){
        //声明函数
        function a(x){
            setTimeout(function(){
                console.log(x);
            }, 1000*x);
        }
        //调用函数
        a(i);
    }
    //调整后的代码
    for(var i=1; i<=5; i++){
        //声明函数
        (function (x){
            setTimeout(function(){
                console.log(x);
            }, 1000*x);
        })(i);
    }






发表回复