回调函数后加bind(this),是因为回调函数形成了闭包(也就是一个函数中还有另一个函数),绑定this后这个回调函数的this,变量指向全局变量。
function bindThis() {
this.text="测试bindThis"
setTimeout(function () {
console.log("使用BindThis:\t"+this.text); // 使用BindThis: 测试bindThis
}.bind(this), 2000);
setTimeout(function () {
// potentially invalid usage of this
console.log(this.text); // 输出 undefined
}, 4000);
setTimeout(() => {
console.log("使用箭头函数:\t"+this.text); // 使用箭头函数: 测试bindThis
}, 6000);
}
bindThis()
通过上述方法,我们可以看出,bind(this)与箭头函数返回结果一致。
与call、apply区别
bind与apply、call最大的区别就是:bind不会立即调用,其他两个会立即调用