你不知道的javascript笔记(1)

传统的编程语言中3个步骤
1.分词/词法分析
将由字符串组成的字符串进行分解成有意义的代码块,被称为词法单元
例如 var a = 2 分解成 var, a, =, 2, 及对应的空格 ,通过有无状态来判断这种方式的行为,如果有
状态,那么这种过程被称为词法分析
2.解析/语法分析
由对应的数组流逐渐嵌套组成程序语法结构体,这种叫抽象语法树(ast)
例如 var a= 2 var表示顶级节点 a,2表示子级节点
3.代码生成
将ast转换为可执行代码过程叫代码生成,它与平台,语言之类的有相关
例如 var a=2 那么将a=2这种方式的ast转换为机器指令,将在内存空间中分配一个地址,并保存这个变量a


作用域的说明
引擎
编译及执行从头到尾整个JS过程
编译器
检查语法分析及代码生成等重要工作
过程
1.遇到相关的变量如(var a)会从作用域处询问是否已经存在当前(作用域)这个变量,如果是,编译在忽略声明的变量,然后继续编译
,否则它就创建出一个新的作用域变量
2.编译器会为引擎生成时所需要的代码,引擎会先询问作用域,是否在当前作用域中存在某个变量,如果存在,就使用,否则继续查询,如果未找到,那么就抛出异常
3.引擎会进行(左lhs右rhs查询),
当变量在赋值在左边的时候进行lhs查询,出现在在边的时候进行rhs查询
例如
// var f(左侧查询)= function ()(右侧查询) {
var c(左侧查询)=2(右侧查询)
}
var f=function a(s){
return s //rhs
}
var c(左侧查询)=a(2) //右侧查询
作用域
收集,维护由系统所标识组成的查询语句,并实施严格的规则
规则
引擎从当前作用域开始执行查询变量,如果找不到,就向上一级继续查询,当抵达最外层的全局作用域时,无法查询是否成功,查询过程均会结束

猜你喜欢

转载自www.cnblogs.com/mhxy13867806343/p/10367459.html