function User(login) {
this.login = login;
this.sayHi = function() {
console.log(this.login);
}
}
var user = new User('Sarah');
setTimeout(user.sayHi, 1000);
上面代码只会显示undefined,因为等到user.sayHi执行时,它是在全局对象中执行,所以this.login中this是全局,所以取不到值。 一种解决方法是将user.sayHi放在匿名函数中执行。
setTimeout(function() {
user.sayHi();
}, 1000);
上面代码中,sayHi是在user作用域内执行,而不是在全局作用域内执行,所以能够显示正确的值。 另一种解决方法是,使用bind方法,将绑定sayHi绑定在user上面。
setTimeout(user.sayHi().bind(user), 1000);
setTimeout(func,0)含义
setTimeout(function () {
func1();
}, 0)
func2();
setTimeout运行机制说过,必须要等到当前脚本的同步任务和“任务队列”中已有的事件,全部处理完以后,才会执行setTimeout指定的任务。也就是说,setTimeout的真正作用是,在“任务队列”的现有事件的后面再添加一个事件,规定在指定时间执行某段代码。setTimeout添加的事件,会在下一次Event Loop执行。 setTimeout(f,0)将第二个参数设为0,作用是让f在现有的任务(脚本的同步任务和“任务队列”中已有的事件)一结束就立刻执行。也就是说,setTimeout(f,0)的作用是,尽可能早地执行指定的任务。
网友评论