理解以下代码:
function foo() {
let n = 1
return function bar() {
let m = 1
function show() {
console.log('m:', ++m)
console.log('n:', ++n)
}
show()
}
}
let a = foo()
console.log(a)
a()
a()
首先看看这个a是个什么?
是返回回来的一个函数——a是一个函数
那么n和m哪个被保留了呢?
n被保留了,而m没有,每次调用a都会重新定义一个m出来。
更进一步
function foo() {
let n = 1
this.sum = function () {
console.log(++n)
}
}
let a = new foo()
console.log(a)
a.sum()
这时n是否被保留了呢?
a.sum()
a.sum()
a.sum()
每次new的时候才开辟一块新的内存来存放这个东西,如下:
let a = new foo()
console.log(a)
a.sum()
a = new foo()
a.sum()
a.sum()