请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

代码输出结果

		function test(a, b) {
            console.log(b)
            return {
                test: function(c) {
                    return test(c, a)
                }
            }
        }

        var retA = test(0) 
        retA.test(2) // 为什么输出0?

老师好,面试遇到过这个问题,这个代码的输出结果有些想不明白,可以指点一下吗?

正在回答 回答被采纳积分+3

1回答

双越 2021-10-29 08:29:38

你觉得应该输出什么?

(对于这种题目,你不要直接丢给我,让我说答案。我想看到你的思考过程)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕妹8458776 #1
    我觉得应该输出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之前的赋值。
    回复 有任何疑惑可以回复我~ 2021-10-29 09:50:00
  • 双越 回复 提问者 慕妹8458776 #2
    我明白你的困惑了。你接着往下看,看完了闭包,就能理解这个问题了。
    回复 有任何疑惑可以回复我~ 2021-10-29 14:08:37
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信