浏览器中javascript解析器的工作原理分析
Javascript分析器工作步骤:
1。发现的东西:VaR,功能,参数;(也叫preparsing)
注:如果名称分为以下两种情况:
满足相同的变量和函数,只保留函数
相同的满足函数,根据顺序码的上下文,离开最后一个。
2。逐行读代码。
注意:表达式可以修改预解析的值。
当第一步是preresolved,JS解析器将搜索从代码开始,直到最后,才发现VaR函数和参数。第一步是通常被称为Javascript的preparsing。此外,当这些内容被发现,所有的变量都被分配一个值提前运行前。它们没有定义。在运行代码之前,所有函数都是整个函数块。
实例分析:
例1:
文件
警报(a);
当运行此代码时,浏览器会出错。
原因:因为Javascript解析器在解析JS代码时没有发现任何var、函数、参数等,所以当一行一行执行代码时,因为A在仓库中找不到,A就错了。
例二:
文件
警报(a);
var a=1;
当运行此代码时,浏览器将弹出未定义。
原因:因为Javascript解析器在解析JS代码时,找到var关键字,然后有一个变量A,所以默认赋值会给仓库中存储一个未定义的值,所以当单步执行代码时,找到变量A,因为值是未定义的,所以POP的值未定义。
例三:
文件
var a=1;
警报(a);
当运行此代码时,浏览器将弹出数字1。
原因:因为在解析JS代码的Javascript解析器,找到var关键字,然后有一个变量,所以默认分配给一个仓库中的一个未定义的值,逐句通过代码,首先找到变量a的值是未定义的,当实现了var a = 1这行代码,有一个新的任务1,流行的价值是多少1。
例四:
文件
警报(a);
var a = 1;
警报(a);
函数A(){
警报(2);
}
警报(a);
var a=3;
警报(a);
函数A(){
警报(4);
}
警报(a);
在运行此代码之后,弹出值的顺序是:函数A(){警报(4);},1, 1, 3,3。
原因:因为在渐进解析代码的Javascript解析器,先找到var关键字,然后有一个变量,所以默认分配给一个未定义的值存储在仓库中,然后再往下分析代码,功能({ alert)时,发现(2);},并根据功能变数名称,保留该规则的功能,一个是功能({ alert)(2);},继续往下看,同时发现当变,依然低着头,当功能函数({ alert)发现(4);},根据同样的原理更换背景的功能,功能({ alert)(4);},最后一个被分配到功能({ alert)(4);},存入仓库,在逐句通过代码,执行第一个警报(一)、功能({ alert)会弹出(4);},然后向下移动,当执行一个= 1and因为表达可以改变预分析的价值,所以一变为1,执行到第二个警报(一),流行的值是1,当功能一个({ alert)实施(2);},因为这个时间是一个函数声明,并不会改变一个值,所以执行第三报警(一),流行的仍然是在转1号,然后会弹出3和3。
以上是本文的全部内容,希望本文的内容能给大家的学习或工作带来一定的帮助,同时也希望能给予更多的支持!