写过React的都知道,我们在SetTimeout中调用setState时是同步更新state的,这是为什么呢?并不是setTimeout改变了setState,而是setTimeout帮助setState“逃脱”了React对它的管控(setTimeout的回调异步执行,使得本该在React全局变量isBatchingUpdates为true时执行的,变成了在false执行了,使得当前场景下的setState具备了立刻发起同步更新的能力,类似如下代码),只要是在React管控下的setState,那就一定是异步的。reduce = () => { // 进来先锁上 isBatchingUpdates = true setTimeout(() => { console.log('reduce setState前的count', this.state.count) this.setState({ count: this.state.count - 1 }); console.log('reduce setState后的count', this.state.count) },0); // 执行完函数再放开 isBatchingUpdates = false}