【发布时间】:2015-06-09 21:16:30
【问题描述】:
假设你有一个递归函数,比如:
Blah.prototype.add = function(n) {
this.total += n;
this.children.forEach(function(child) {
child.add(n);
});
};
child.add() 是尾号吗?如果不是,可以这样写吗?
【问题讨论】:
-
我会这么说。即使它在循环中,它仍然是执行的最后一个操作。
-
我不确定...我在考虑传统的
for(i=0;i<children.length;i++)循环,并认为n < children.length比较将是最后一个操作。不确定 forEach,如果是这种情况,为什么 forEach 比 for 更受欢迎。 -
大概 JS 中的
tail call会使用return someFn()还允许对启动器函数进行垃圾收集。 -
forEach() 在迭代时不会看到推入数组的项目...
-
这是回调函数中的尾调用,但
forEach仍需要保持其循环状态。因此,此循环与for循环之间的堆栈使用实际上几乎没有区别。
标签: javascript tail-call-optimization