浏览器是如何解析JAVAScript的?本篇文章就来带大家认识浏览器解析JavaScript的原理,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助 。【推荐视频教程:JavaScript视频教程】
浏览器解析JavaScript原理特点:
1、跨平台
2、弱类型 javascript 定义的时候不需要定义数据类型,数据类型是根据变量值来确定的.
var a = 10; //数字类型
var a = true //boolean类型
( 强类型: 定义变量的时候需要定义变量的类型:例如java,C#中的int a = 10 boolean a = true,直接确定了数据类型)
3、解释执行,逐行执行
javascript 执行过程
1、语法检测
就是看你有没有基本的语法错误,例如中文,关键字错误...
2、词法分析(预编译)
3、逐行执行
词法分析
预编译的过程(两种情况)
【浏览器是如何解析JavaScript的?】1、全局(直接是script标签中的代码,不包括函数执行)
以下面demo为例:
console.log(a); console.log(b)
var a = 100;
console.log(a) var b = 200 var c = 300 function a(){
} function fun(){
}
执行前:
1)、 首先生成一个GO(global object)对象,看不到,但是可以模拟出来用来分析
GO = { //自带的属性都不写
}
2) 、分析变量声明,变量名为属性名,值为undefined
GO = {
a : undefined,
b : undefined,
c : undefined
}
3)、分析函数声明,函数名为属性名,值为函数体,如果函数名和变量名相同,则无情覆盖
GO = {
a : function a(){
},
b : undefined,
c : undefined,
fun : function fun(){
}
}
此时,GO就是预编译完成的最终对象,词法分析结束 。
4)、 逐行执行,分析过(变量声明,函数声明)不用管了,只管赋值(变量赋值)
a赋了一次值,值改变为100
GO = {
a : 100,
b : undefined,
c : undefined,
fun : function fun(){
}
}
2、局部( 函数执行的时候)
以这个demo为例:
num = 100510)
1)、预编译的时候
GO = {
num : undefined,
fun : function
}
2)、执行过程
GO = {
num : 100,
fun : function
}
3)、函数调用,也是会生成自己的作用域(AO:active object),AO活动对象. 函数调用时候,执行前的一瞬间产生的,如果有多个函数的调用,会产生多个AO
ⅰ、函数执行前的一瞬间,生成AO活动对象
fun.AO = {
}
ⅱ、 分析参数,形参作为对象的属性名,实参作为对象的属性值
fun.AO = {
num : 5
}
ⅲ、分析变量声明,变量名为属性名,值为undefined,如果遇到AO对象上属性同名,不去做任何改变
fun.AO = {
num : 5
}
ⅳ、分析函数声明,函数名为属性名,值为函数体,如果遇到AO对象上属性同名,则无情覆盖(在这里没有函数声明,跳过)
4)逐行执行
推荐阅读
- Android代码中是如何下毒的
- x86与x64的区别?云服务器如何选择操作系统?
- 神话里的混沌是啥意思 道教关于混沌的描述
- 访问量一大服务器就挂?那是你不懂限流
- 《桃花源记》是恐怖故事
- 交换机权限管理混乱,可操作交换机人员少,如何破局?
- 梦见手机掉进粪坑里用手捞上来 梦见手机掉粪坑里又捡起来还是好的
- php生成验证码并验证
- HTTP协议字段和含义
- 春茶,如何正确且健康的品饮