var obj = {
id: 'awesome',
cool: function coolFn() {
var _scope = this;
console.log(_scope.id);
}
}
var id = 'not awesome';
obj.cool();
**// 为什么下面这两段调用的结果不一样, this 的指向问题**
// 为什么obj.cool,和obj.cool()有什么不同,结果也是不一样的
setTimeout(obj.cool,100) // not awesome
setTimeout(obj.cool(),100) // awesome
定时器的第一个参数为一个函数,或一段代码块(如"console.log('a')"),当参数为函数时,函数中的this将指向window,解决:setTimeout(obj.cool.bind(obj),100)或者setTimeout(function(){obj.cool()},100)
至于第二个定时器在读到这句的时候会立即执行obj.cool(),也就是打印一次awesome,然后将字符串awesome作为定时器的第一个参数,这不是一个函数或一段可执行的代码块,所以这个定时器触发的时候会报错