js的执行机制

js的定时器和js执行机制

Js给我们提供了两个计时器的方法,他们是window对象下面的两个方法,凡是window的属性和方法,再操作的时候可以将window省略。

Window.setTimeout()可以简写 setTimeout()

在指定的毫秒数后,执行指定的代码

返回值 返回的是计时器的个数

参数  第一个参数是callback

  第二个参数 是毫秒

 

 

 

 

clearTimeout()

消除setTimeout()开启的定时器

返回值 没有返回值

参数 指定的定时器

 

 

 

Window.setInterval()可以简写setInterval()

 

参数和返回值和setTimeout一样

清除setInterval()用的是

clearInterval()

没有返回值 参数就是开启的setInterval

 

 

 

计时器中this问题

 

计时器中的this统统指向window

 

这个计时器再使用的时候将window省略了,但是不影响this指向。

 

时间 小时---毫秒  1=1000毫秒

 

重点 js的执行机制

 

Js是单线程执行

 

 

 

进程 应用程序 都可以算是一个进程 几乎所有的应用程序都是多进程

 

线程 每个进程里的最小单位就是线程

 

 

多线程好 共作效率高,但是js这门语言是操作dom,就相当于我们盖房子,前面的没盖好,后面的就没法操作。单线程,有一处出现问题,后面的都需要等待。

为了解决单线程出现的问题js提供了同步和异步这两个概念

同步执行:前一个任务执行完了,才能执行后一个任务,这种事同步执行 相当于盖房子

异步执行:前一个任务执行时花费时间过长,无需等待,执行下一个任务,这时异步。相当于做饭,煮饭的时候还可以炒菜。

Js的异步执行 事件  定时器  资源请求 才是异步。

 

 

 

定时器会定时执行吗

 

不会 只有主线程执行完毕了,才开启定时器,向任务队列提交任务。如果主线程没有执行完,即使过了定时器的时间,也不会执行,因为还没有提交到任务队列中。只有主线程执行完了,才开启定时器,然后时间到了,才提交任务。然后主线程获取到任务才执行定时器中的代码。

 

 

 

  1. 计时器不是从计时器函数执行后就开始计时,而是主线程的代码执行完毕之后才开始计时
  2. 主线程执行的过程中,setTimeout onclick等会执行,只是里面的callback会去排队提交。

 

SetTimeout等主线程结束后开始计时,达到计时时间就提交任务,onclick只有触发这个事件就提交任务。

 

面试题

 

 

 

 

 

结果是打印四个5 而不是五个5

 

 

posted @ 2020-03-05 19:19  段康  阅读(297)  评论(0)    收藏  举报