乐趣区

关于javascript: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()() 的形式调用,前一次和下一次的调用会产生不同的地址,指向堆中不同的数据,故互不影响。

退出移动版