首先 出这道题的人 脑子有坑————这道题本身确实涉及闭包了,但是面试者有故意绕晕人的嫌疑,实在太low。并且谁在业务中写这样的代码,我见到一定踢他的屁股。
第一个函数,为什么没有加起来,注意a对象仅仅被赋值了一次,并且包住了第一次传入fun函数的n值,也就是0。
之后的每一次a.fun() 都是再调用 fun(x, 0) (x = 1, 2, 3), 打印o值,o都是0。
第二个很好理解,就是很典型的闭包例子,不用多解释吧。。。
尝试把第一个改成下面的代码试试,注意后三句:
function fun(n, o) {
console.log(o)
return {
fun: function (m) {
// console.log(n)
return fun(m, n)
}
}
}
var a = fun(0); // 输出undefined,返回值里记住了0
a = a.fun(1); // 输出上次记住的0,返回值里记住了1
a = a.fun(2); // 输出1,返回值里记住了2
a = a.fun(3); // 输出2,返回值里记住了3
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…