您的位置:首页 > Web前端 > JavaScript

js的解析机制

2018-03-13 17:13 295 查看
个人理解。。。
============================================================================
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):执行宏观任务-》执行完后执行微观任务-》执行新的一轮宏观任务。
执行宏观任务<script>。
执行遇到定时器->加入宏观任务。
执行微观任务promise,then。
执行新的一轮宏观任务。执行定时器宏观任务。

============================================================================这种解析机制也因此引出了闭包,定时器,事件这些我们比较懵逼的问题。

===========================================================================
上面所写的所有内容纯属自己的理解。有错误的地方,麻烦各位大神能指出。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  js解析 web 前端