因为你把这个function传给子组件呼叫的时候,子组件呼叫的当下call site是子组件,所以function里面的this会变成子组件而不是父组件可是因为你希望改的是父组件的状态(this应该要是父组件),所以你要先把function在父组件给.bind(this),让他的this固定在父组件(.bind()会回传一个this被固定成传给.bind的参数的function)这样不管你把这个bind过的function传到哪里去(例如传到子组件),他的this都还是当时bind著的那个父组件,就不会指错this《你所不知道的 JS:范畴与Closures,this与物件原型》这本书对this的概念讲得很详细,推荐读一下,这样你就会更清楚为什么同一个function在不同地方呼叫的时候,this可能是不同个object.bind 主要就是用来解决 this.state、this.setState 的 this 在传到其他地方之后不会是父组件的问题,所以才要在父组件的 constructor 就先做 .bind(this) 复写成 this 固定为父组件的 function