在 useEffect 挂钩中将 setInterval 重新定义为变量发生了什么?

what happend re-define setInterval to variable in useEffect hook?

我想知道如果我在 react hook useEffect 中对同一个变量重复定义 setInterval 函数会发生什么。

我检查变量每次定义都有新的 setInterval id 值。 但是我想知道是否有关于以前的 setInterval 计时器的实例保留在内存中,即使新的 setInterval 定义在同一个变量中??

 useEffect(() => {
    const timer = setInterval(
      () => {
        if (count < elementLength - 1) {
          boolean.current = false;
          setCount(prev => prev + 1);
        } else {
          boolean.current = true;
          setCount(0);
        }
      },
      boolean.current ? 50 : 2500
    );

    return () => {
      clearInterval(timer);
    };
  }, [count]);

What happens if I assign repeatedly to same variable?

这不是相同的变量。每次效果运行时,它都会创建一个全新的 timer 变量。他们都是独立的。

But I wonder is there instance remained in memory about previous timer

是也不是。 useEffect 回调返回的清理函数是 timer 上的闭包,只要需要,React 就会将其保存在内存中。实际上,它会在组件卸载或其依赖项发生变化时调用一次,之后可以 garbage-collected ,并带有相应的 timer 变量。