js的解析机制

个人理解。。。

============================================================================

js变量类型:var(所有【undefined、null、boolean、string、number、object】)声明。

js函数。

再浏览器运行代码之前会解析js代码:

第一步:解析代码

(1):把所有window全局变量赋值为undefined。

(2):把所有函数块提取出来(一个等待执行的块)。

第二步:执行代码

(1):代码开始执行,全局变量开始重新赋初始值。没有的话->underfined

(2):遇到调用函数方法,解析函数,执行函数方法里面的代码。

 (3):继续向下执行。

特殊:定时函数,点击函数等等。

我们知道:

(1)js执行是单线程的,而浏览器是多线程的。

(2)js分为同步任务和异步任务。

(3)js分为宏任务和微观任务。

解析遇到点击等事件的时候js会给浏览器的另一个线程处理,到js主线程(同步线程执行完所有的任务后)查看异步任务队列的任务有没有需要处理的,有的话加入主线程处理。

定时器、事件处理函数等、都是异步队列的回调函数。

问题来了:如何保证我的定时器在指定时间内触发呢(如果定时时间到了,但是同步任务还没有执行完)。

结论:事实上并不能保证定时间准时出发,如果同步任务没有执行完的话,会一直执行完同步任务,然后执行定时任务。

点击事件也是这样的。

============================================================================

用宏观任务和微观任务来说。

(1):执行宏观任务-》执行完后执行微观任务-》执行新的一轮宏观任务。

执行宏观任务

你可能感兴趣的:(js的解析机制)