Javascript|Javascript 语法解析
文章图片
执行过程
词法分析
-> 语法分析
-> 预编译
-> 解释执行
一. 词法分析
核心:词法分析是将字符流(char stream)转换为记号流(token stream)。把输入的字符串分解为一些对编程语言有意义的代码块(词法单元)词法分析主要有三个步骤
- 分析参数
- 再分析变量的声明
- 分析函数声明
function func(age) {
console.log(age);
var age = 25;
console.log(age);
function age() {
}
console.log(age);
}
func(18);
函数在运行的瞬间,生成一个活动对象(Active Object),简称
AO
.- 分析参数
- 函数接收形式参数,添加到 AO 的属性,并且这个时候值为
undefine
,即AO.age=undefine
- 接收实参,添加到 AO 的属性,覆盖之前的
undefine
.
- 分析变量声明
var age;
或 var age=18
;
- 如果上一步分析参数中 AO 还没有
age
属性,则添加 AO 属性为undefine
,即AO.age=undefine
. - 如果AO上面已经有
age
属性了,则不作任何修改。
- 分析函数的声明
- 如果有function age(){}把函数赋给AO.age ,覆盖上一步分析的值。
核心:会将上一步的词法单元集合分析并最终转换为一个由元素逐级嵌套所组成的代表了程序语法结构的树,即抽象语法树(AST)想详细了解AST可移步至:AST
三. 预编译
核心:将上一步的AST转换为可执行代码当JavaScript引擎解析脚本时,它会在预编译期对所有声明的变量和函数进行处理。并且是先预声明变量,再预定义函数。
四. 解释执行 在执行过程中,JavaScript 引擎是严格按着作用域机制(scope)来执行的,并且 JavaScript 的变量和函数作用域是在定义时决定的,而不是执行时决定的。JavaScript 中的变量作用域在函数体内有效,无块作用域;
推荐阅读
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 事件代理
- 六步搭建ES6语法环境
- 数组常用方法一
- Quartz|Quartz 源码解析(四) —— QuartzScheduler和Listener事件监听
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)
- [源码解析]|[源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3)
- Android系统启动之init.rc文件解析过程
- 小程序有哪些低成本获客手段——案例解析
- JavaScript|vue 基于axios封装request接口请求——request.js文件