javascript - JS递归超出最大调用堆栈大小:2个函数之间的差异
问题描述
我正在研究这个例子:https ://bl.ocks.org/mbostock/1705868 我的目标是添加一个按钮,单击该按钮将绘制一个新圆圈并使其作为第一个圆圈移动而无需重置其周期。所以我用这个替换了转换函数,以便能够在参数中的特定圆上调用它:
function transition2(c){
c.transition() //Default transition function?
.duration(10000)
.attrTween("transform", translateAlong(path.node()))
.each("end", transition2(c));
}
但是当我打电话transition2(circle);
而不是transition();
我有一个Maximum call stack size exceeded
. 我试图用一个 int 来解决这个问题,我每转一圈(就像我想做 10 圈一样)。
为什么我在第二个函数中出现此错误,但在第一个函数中没有?有什么不同?
解决方案
您正在调用 transition2 函数,而不是在“结束”动画侦听器中传递对它的引用...
而不是 Mike Bostock 的示例,他只是将引用传递给transition
函数:
.each("end", transition);
您需要对引用函数的绑定回调:
function transition2(c){
c.transition() //Default transition function?
.duration(10000)
.attrTween("transform", translateAlong(path.node()))
.each("end", transition2.bind(null, c));
}
的第一个参数bind
是一个参考,this
但它没有被使用...
PS 感谢@rioV8 建议绑定回调,我在原始答案中错过了它。
推荐阅读
- google-bigquery - 使用云控制台将 csv 文件加载到 BQ 表
- html - 如何在 CSS 伪元素之前/之后控制图像
- python-3.x - 未找到模块没有名为“安全”烧瓶的模块
- watchos - 在应用程序打开时在 watchOS 上检测新的一天
- pandas - 如何在 Pandas 中对面板数据集的行求和和平均?
- r - 如何使用闪亮和传单创建空间数据
- windows - SQLite 错误参数或其他 API 滥用
- python - Selenium TimeoutException 与 Flask 和 Python
- bash - macOS终端配置问题,设置颜色和git分支信息
- sql - Rails:如何使用 has_many 相关表进行高级查询?