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):执行宏观任务-》执行完后执行微观任务-》执行新的一轮宏观任务。

执行宏观任务<script>。

执行遇到定时器->加入宏观任务。

执行微观任务promise,then。

执行新的一轮宏观任务。执行定时器宏观任务。


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


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

上面所写的所有内容纯属自己的理解。有错误的地方,麻烦各位大神能指出。。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值