闭包会在父函数外部,改变父函数内部变量的值——代码解释

341 阅读1分钟

看看这段代码输出什么


        function f1() {
            let a = 1
            let b = 2
            add = function () {
                b++
            }
            let f2 = function () {
                let a = 3
                let b = 4
                return {
                    a,
                    add,
                    b,
                }
            }
            return f2
        }
        
        let res = f1()
        
        let test1 = res()
        test1.add()
        console.log("b=>",test1.b)
        
        let test2 =res()
        test2()
        console.log("b=>",test2.b)
        
        
        

在这里 add 函数内部的变量b,是引用到了外部函数f1的变量b来的,也就是这里会形成一个闭包,变量b就在这个闭包内。根据闭包不销毁内存的原因。后面修改了b,b的值就会保存下来test1.add()运行一遍后b加1了,但是需要运行然后才加上显示出来b+1的。 因此,输出为

b=>2
b=>3