采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
function test(a, b) { console.log(b) return { test: function(c) { return test(c, a) } } } var retA = test(0) retA.test(2) // 为什么输出0?
老师好,面试遇到过这个问题,这个代码的输出结果有些想不明白,可以指点一下吗?
你觉得应该输出什么?
(对于这种题目,你不要直接丢给我,让我说答案。我想看到你的思考过程)
我觉得应该输出undefined。 第一行代码输出undefined我能理解,只传入a,没有传入b,打印时输出undefined。 我理解的是,在var retA = test(0) 这行代码执行完以后,test这个函数就执行完成了,函数内的变量a、b都被销毁了。 当执行retA.test(2)时,相当于传入了c = 2,接着执行它的return test(c, a),我觉得此时传入的参数是test(2, undefined)。 但是结果输出0,我不理解为什么在执行最后一个return时,这里还能拿到参数a之前的赋值。
我明白你的困惑了。你接着往下看,看完了闭包,就能理解这个问题了。
登录后可查看更多问答,登录/注册
针对时下面试高频考点,帮助新人js面试快速通关
2.0k 17
2.3k 11
1.8k 11
2.2k 11
1.6k 11
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号