闭包的问题? 为什么都是2 没有变化?

function box() {
    let a = 1;
    return function son() {
        a++
        console.log(a)
    }
}
box()();
box()();
box()();
box()();
阅读 2.3k
3 个回答

因为每次都生成了新的闭包

let a = box()
a() // 2
a() // 3

闭包保存了当前上下文环境,每次 box() 都会生成一个新的上下文环境。

box()()

你想要的效果:

let b = box()
b()
b()
b()
b()

实际上你写的:

let a = box()
a()
let b = box()
b()
let c = box()
c()
let d = box()
d()

看出差别了吗?你实际上每次执行都不是同一个函数,所以自然不会得到你想象中的结果。

let fn = box()
fn()
fn()
fn()

推荐问题