cancelAnimationFrame如何处理回调中的副作用

How does cancelAnimationFrame deal with side-effects in the callback?

本文关键字:回调 副作用 处理 何处理 cancelAnimationFrame      更新时间:2023-09-26

requestAnimationFrame接受一个回调函数,该函数在帧显示之前运行。假设这个回调函数有如下副作用:

function callback {
  ++GLOBAL_VAR_A;
  ++GLOBAL_VAR_B;
}

如果我调用cancelAnimationFrame请求回调,回调会是原子的吗?换句话说,回调是保证完全执行还是根本不执行?或者取消休假说GLOBAL_VAR_A递增,而不是GLOBAL_VAR_B ?

此外,如果这个回调是原子的,如果我成功取消帧,回调是否执行?

Javascript是单线程的,所以这个问题无法显示:当cancelAF被调用时,要么回调被调用,要么不被调用。如果调用了它,则什么也不做。如果它没有被调用,以后就不会被调用。你的问题表明cancelAF也会取消正在进行的回调,但规范对此只字未提:MDN描述为:

window.cancelAnimationFrame

取消先前通过调用window.requestAnimationFrame().

(https://developer.mozilla.org/en-US/docs/Web/API/window.cancelAnimationFrame).

这是一个被取消的"请求",而不是回调。

可能更清楚一点:如果你在++GLOBAL_VAR_A之后和++GLOBAL_VAR_B之前调用cancelAF,那么这意味着回调已经被调用,cancelAF什么也不做。

cancelAF没有返回值,所以你不能告诉你"cancel(led) the frame成功了"