JavaScript-一个经典闭包

    function f1(){
        let a = 0;
        function f2(){
            a = a + 1;
            return a ;
        }
        return f2;
    }
    
    let x = f1();
    const c1 = x();
    const c2 = x();
    const c3 = x();
    
    const c4 = f1()();
    cosnt c5 = f1()();
    
    console.log(c1,c2,c3,c4,c5);

打印结果是:1,2,3,1,1

把f1的调用结果赋值给一个变量,然后再用变量的形式调用这个方法,下一次的结果会覆盖上一次调用的结果,因为它们在栈中都是同一个地址,指向堆中的数据。

而使用f1()()的方式调用,前一次和下一次的调用会产生不同的地址,指向堆中不同的数据,故互不影响。

你可能感兴趣的