文章链接
js语言和框架-JavaScript语言-闭包相关
面5笔5以下代码输出的结果是?
function test() {
var n = 4399
function add() {
n++
console.log(n)
}
return {n:n, add:add}
}
var result1 = test()
var result2 = test()
result1.add()
result1.add()
console.log(result1.n)
result2.add()
【解析】
答案:4400 4401 4399 4400
test构成了一个闭包,result跟result2各自有自己的test作用域,所以最后result2.add()结果是4400
前两个没啥好说的,懵逼点在第三个,这里{n:n}是对变量n里的值进行缓存,而不是本身n这个指针变量,这样生成add的时候n指向的值是多少{n:n}里的值就是多少(这里返回的对象是个深拷贝)