美文网首页
setTimeout 没那么简单

setTimeout 没那么简单

作者: 9月的甜橙子 | 来源:发表于2021-09-02 09:02 被阅读0次
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)的作用是,尽可能早地执行指定的任务。

refer to http://caibaojian.com/about-settimeout.html

相关文章

  • setTimeout 没那么简单

    上面代码只会显示undefined,因为等到user.sayHi执行时,它是在全局对象中执行,所以this.log...

  • 没那么简单

    感觉自己再这样下去真的离抑郁不远了 好怕有一天真的会去自杀 我好累啊

  • 没那么简单

    刘娜 焦点解决网络初级九期 驻马店 2018~04~20 坚持分享第55天 听着黄小琥的歌曲《没那么简单》,...

  • 没那么简单

    一如黄小琥《没那么简单》里唱的,没那么简单,就能找到聊得来的伴,仔细思量,颇有几分道理。 一直以高冷范儿示人的王志...

  • 没那么简单

    梦你 不只是容颜而已 想你 不只是看你而已 爱你 不只是说说而已 懂你 不只是心里而已

  • 没那么简单

    一怀衣服抛进洗衣机洗衣液柔顺剂消毒液1:1:1 亲密接触盖上盖子 一切无形任它们在桶内咆哮撕扯纠缠大红的拖鞋热闹...

  • 没那么简单

    “相爱没有那么容易,每个人有Ta的脾气” -《没那么简单》 ...

  • 没那么简单

    最近继续再看跟交易相关的书,其中有部分讲到一个20年翻了40倍的对冲基金的历程,在外人看来,这收益很好,这个基金经...

  • 没那么简单

    曾经说好携手与共的人,最后却伤你最深,这样的无奈,大概只有经历过的人才懂。

  • 没那么简单

    一开始看到今天的练习,觉得:哎呀,好简单啊,苦逼了这么多天,终于碰到一天轻松一点的作业了,内心暗暗窃喜。 可是没想...

网友评论

      本文标题:setTimeout 没那么简单

      本文链接:https://www.haomeiwen.com/subject/ucsqwltx.html