Yad*_*ood 5 javascript google-chrome v8
作为标题,为什么requestAnimationFrame
递归不会占用内存.这篇帖子说V8引擎没有优化tail call
,所以我想我一定错过了什么.是因为浏览器背后有什么东西吗?或者V8支持优化tail call
?
这是MDN的例子:
function step(timestamp) {
var progress = timestamp - start;
d.style.left = Math.min(progress/10, 200) + "px";
if (progress < 2000) {
requestAnimationFrame(step);
}
}
requestAnimationFrame(step);
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 11
requestAnimationFrame
一旦帧需要绘制,通知浏览器它希望执行回调函数.必须存储函数的闭包直到进行回调,但之后它可以被垃圾收集,只要它不在别处引用.
这里没有递归,因为我们通过一个断开执行的事件循环.该函数不会调用自身,它要求被调用.每次完成执行时,都可以回收该位RAM.
值得记住的是,如果step
简单地称自己,那将是一个无限的递归.在这种情况下,堆栈会爆炸.如果我们想象一个无法爆发的无限堆栈(或尾调用递归),它将阻止事件循环并阻止任何其他代码运行,因为一次只能运行一个函数.
归档时间: |
|
查看次数: |
585 次 |
最近记录: |