函数以递归方式调用自身时会导致“无方法”错误的原因是什么?

时间:2012-02-03 09:13:17

标签: javascript node.js

我正在为reddit编写一个web爬虫,每2秒只允许1个请求,并希望使用递归来发出请求。在完成1个人的一系列获取请求注释后,我想发出完成并再次在消息队列中的下一个用户名上调用注释。问题是每当我超过一个级别时,我得到一个“TypeError:对象#没有方法'发出'”。

我也愿意接受更好的方法,我刚刚开始学习节点,并确信有更好的方法来实现这一目标。

我在下面的要点中发布了我的代码......任何帮助都会很棒!

https://gist.github.com/1729182

1 个答案:

答案 0 :(得分:2)

问题在于this,它是一个关键字(非自由变量),其值为函数调用的“接收者”。

例如,给定:

x = {fn: function () {return this} }
x.fn()

然后在fn内,this评估x评估的内容(以及x.fn() === x)。在使用 no 接收器调用代码grabComments时,this将恢复为全局对象。您可能对Function.call/apply感兴趣,或者只是简化代码以使用嵌套函数处理递归,以便self可以在范围内保持绑定。

(在JavaScript中,方法绑定到对象:它们只是被推入属性的函数,因此接收器在确定this时是最重要的executiong函数。)

另见:

快乐的编码。