闭包

闭包1

闭包

每次执行ff()的时候实际上执行的是f1内部的函数

闭包2

闭包

闭包

闭包3

function f1(){

    for(var i = 0; i < 10; i++) {

        setTimeout(function() {

            console.log(i);

        }, 1000)

    }

}

f1();

打印出1010

对于闭包3如果要想改造一下输出0到9,以下两种是可行的

1.内部改造成立即执行函数

function f1(){

    for(var i = 0; i < 10; i++) {

        (function(num){setTimeout(function() {

            console.log(num);

        }, 1000)})(i);

    }

}

f1();

打印出09

2.对于for里面的var改成let,闭包本身是那个变量占用内存不释放的,如果用块级作用域可以解决