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变量类型: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的prototype继承机制
- 作用域、JS预解析机制
- js解析机制分析
- 全面解析JS中的this机制
- JS解析机制
- JS的解析机制
- 深入解析JavaScript框架Backbone.js中的事件机制
- Vue.js源码解析(九)【从template到DOM(Vue.js源码角度看内部运行机制)】
- 关于JS解析机制、作用域的一些总结
- JS的解析机制(作用域、变量提升等)和两个例子
- Js中的预解析机制与定义函数的三种方式
- js中的预解析(变量提声)、作用域链、闭包机制
- phoengap源码解析——插件机制,java和js代码互调用详解
- js学习小结(五)2014.4.28(JS预解析机制)
- phoengap源码解析——插件机制,java和js代码互调用详解
- js加载与执行机制解析
- 深入解析JavaScript框架Backbone.js中的事件机制
- 【转】你不知道的js中关于this绑定机制的解析
- 详解js的作用域、预解析机制
- JS解析机制