看看这段代码输出什么
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