js中闭包面试题,有关变量值会被保存的问题(求助各位大佬)
我刚刚学到js闭包,碰到一道有关于闭包的题。
function fun(n, o) {
console.log(o)
return {
fun: function (m) {
// console.log(n)
return fun(m, n)
}
}
}
var a = fun(0); //und
a.fun(1); //0
a.fun(2); //0
a.fun(3); //0
这里的值为什么不会累加呢,每次都是从0开始呢?下面这道题也是再一次的调用,没有值接收,却是可以累加
function fn() {
var a = 0;
function fn1() {
a++;
console.log(a) //123
return fn(a)
}
return fn1;
}
var f = fn();
f() //1
f() //2
f() //3
麻烦诸位大佬了,还望指点迷津,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先 出这道题的人 脑子有坑————这道题本身确实涉及闭包了,但是面试者有故意绕晕人的嫌疑,实在太low。并且谁在业务中写这样的代码,我见到一定踢他的屁股。
第一个函数,为什么没有加起来,注意a对象仅仅被赋值了一次,并且包住了第一次传入fun函数的n值,也就是0。
之后的每一次a.fun() 都是再调用 fun(x, 0) (x = 1, 2, 3), 打印o值,o都是0。
第二个很好理解,就是很典型的闭包例子,不用多解释吧。。。
尝试把第一个改成下面的代码试试,注意后三句: