js闭包

1
2
3
4
5
6
7
8
9
10
function a(){
var i=0;
function b(){
console.log(++i);
}
return b;
}

var c=a();
c();

这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

  • 闭包的作用
    在a执行完后并返回,闭包使得JavaScript的垃圾回收机制GC不会收回a所占的资源,因为a的内部函数b的执行需要依赖a中的变量
    下面是一个经典的闭包利用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for(var j=0;j<5;j++){
    (function(j){
    setTimeout(function(){
    console.log(j);
    },1000);
    })(j)
    }
    console.log(`--------------`);
    for(var i=0;i<=5;i++){
    ((i)=>{setTimeout(()=>
    console.log(i),1000);
    })(i);
    }
分享