校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > js语言和框架 > 闭包相关
题目

以下代码输出的结果是?

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}里的值就是多少(这里返回的对象是个深拷贝)

C 0条回复 评论

帖子还没人回复快来抢沙发