setTimeout(() => { console.log(count, 'end'); // 还是 0! }, 5000); 你可以把`react`组件的每次渲染理解为生成了一个平行宇宙。 初始化渲染时生成的平宇宙,其`count`值为`0`,所以就算定时器延迟一年执行,它也只能输出`0`。 当你调用`setCount(count + 1)`,这触发了第二次渲染,又生成了一个平行宇宙,这个平行宇宙中的`count`是`1`,这个宇宙中的定时器也就只能输出`1`。 去掉定时器帮助理解 const handleClick = () => { setCount(count + 1); console.log(count, 'end'); } // 两者其实是一样的,加上定时器并不会让count拥有穿透平行宇宙的能力 const handleClick = () => { setCount(count + 1); setTimeout(() => { console.log(count, 'end'); }, 5000); }