- 定时器内的
this
指向:
- 在上述代码中,定时器
setTimeout
内的this
指向全局对象(在浏览器环境下是window
,在Node.js环境下是global
)。
- 原因是在JavaScript中,函数内部的
this
指向取决于函数的调用方式。setTimeout
的回调函数是作为普通函数调用的,普通函数调用时,this
指向全局对象(非严格模式下)。在严格模式下,普通函数调用时this
是undefined
。这里代码没有开启严格模式,所以this
指向全局对象。
- 修改让它指向
obj
对象的方法:
const obj = {
name: 'test',
printName: function() {
setTimeout(function() {
console.log(this.name);
}.bind(this), 1000);
}
};
obj.printName();
const obj = {
name: 'test',
printName: function() {
setTimeout(() => {
console.log(this.name);
}, 1000);
}
};
obj.printName();
const obj = {
name: 'test',
printName: function() {
const self = this;
setTimeout(function() {
console.log(self.name);
}, 1000);
}
};
obj.printName();