博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js解析器的执行原理
阅读量:6864 次
发布时间:2019-06-26

本文共 1030 字,大约阅读时间需要 3 分钟。

首先看一段代码

            
我是span

代码的执行顺序是从上往下的,当代码执行到script标签时,也就开始执行js代码了。

执行js代码一般分两步:1.预解析代码。   2.逐行执行代码。

 

第一步:预解析代码

预解析代码呢,主要会把var , function , 参数等一些东西 存储进仓库里面(内存)。

1.var 一般用于声明变量,预解析代码的时候,等号后面的赋值过程不会执行,所以预解析时的var 变量 都是未定义的。

2,.function 函数呢,预解析的时候,值就是函数里面的内容。

当变量和函数重名时:就只留下函数的值,不管顺序谁前谁后。所以函数的优先级比变量高。注意:这只是预解析。

当函数和函数重名时:会留下后面那个,会遵循上下文机制。

 

第二步:逐行执行代码

当预解析完成之后,就开始逐行执行代码了,全部代码都会完整的执行。

 

实例:下面的alert分别会弹出什么值

1 

第一步:预解析

上面说过,预解析时只会把var , function ,参数等存储起来,所以:

执行到第二行时,a 的值是未定义。

执行到第四行时,a 的值是函数本身,也就是function a(){alert(2);}。

执行到第六行时,a 的值还是第四行时的值,也就是function a(){alert(2);},因为函数的优先级比变量高。

执行到第八行时,a 的值就变成了function a(){alert(4);} ,因为当两个函数重名时,遵循代码从上往下执行。

 

第二步:代码逐行执行

预解析完成之后,就是代码逐行执行了,

第二行:会弹出function a(){alert(4);} ,因为预解析完成之后,被存进内存的a 的值就是function a(){alert(4);}

第三行:第三行里有表达式,a 被赋了一个新的值1  表达式会改变变量的值。表达式可以改变预解析的值。

第四行:只是函数的声明,并没有用到表达式,而且也没有函数的调用,所以不会改变a 的值。

第五行:因为a 的值没有变化,所以还是1

第六行:使用了表达式,a 被赋了一个新的值3

第七行:会弹出3

第八行:函数的声明,不会改变a 的值。

第九行:a的值没有改变,所以还是3

 

最后结果为:

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Mrrabbit/p/7599637.html

你可能感兴趣的文章
问题-[ACCESS2007]怎么显示MsysObjects
查看>>
[Learn Notes] PowerShell学习笔记
查看>>
教你如何追缴中国移动恶意扣费:lol :lol
查看>>
《Redis设计与实现》之第四章:字典
查看>>
正确配置Linux系统ulimit值的方法
查看>>
PHP 学习笔记 01
查看>>
install flash player plugin: linux 11.10 --chrome
查看>>
2012需要分析的一些技术(1)
查看>>
Android 解读Event和Main Log
查看>>
Linux-NTP-Server+Client
查看>>
OpenCV学习(12) 图像的腐蚀与膨胀(3)
查看>>
yii图片上传
查看>>
页面滑动至某处,固定导航。
查看>>
数据库事务整理
查看>>
在ctex环境下利用Metapost作图
查看>>
使.NET使用数据库连接池 .
查看>>
Java泛型的好处
查看>>
centos6.3下yum安装redis
查看>>
PHP命名空间(Namespace)的使用详解(转)
查看>>
构建之法第四、第五章读后感
查看>>