大家帮忙看下这个函数错误出在哪里了

var obj = {

  hello: function(n) {

    return obj.hello(n-1) + n;

  }

}

var obj2 = {hello: obj.hello};

obj = {};

console.log(obj2.hello(3));


叮当猫咪
浏览 524回答 1
1回答

慕田峪7331174

这是典型的引用丢失问题,两个对象引用了相同的函数,但函数引用自身的时候只是通过其中的一个对象,当obj置为空对象时,obj2对象的匿名函数仍然存在,但是obj1的属性已经不存在了,而这时再通过原有的obj.hello属性引用进行递归调用自身时,就会出现严重的问题。解决方案建议将匿名函数的obj1显式引用改成this(函数上下文),这样obj2.hello()的this对象就是obj2,如此便可解决问题。或者使用内联命名函数,将obj1对象定义如下:var obj1 = {   hello: function js(n) {    return js(n-1) + n;   } }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript