闭包

function Foo() {
    var i = 0;
    return function() {
        console.log(i++);
    }
}

var f1 = Foo(),
    f2 = Foo();
f1();
f1();
f2();

0 1 0
函数在执行完了之后它和它的局部变量就会被销毁,但是foo函数返回了一个匿名函数的引用(即一个闭包),它可以访问foo()被调用产生的环境,而局部变量i则一直处于在这个环境中,只要一个环境可能被访问到,那么就不会被销毁,所以前两个是0,1
因为foo()返回的是一个匿名函数,所以f1,f2相当于指向了两个不同的函数对象,所以f2()为0

posted @ 2021-06-09 09:40  zhongfang99  阅读(39)  评论(0编辑  收藏  举报