Javascript 语法解析

执行过程

词法分析 -> 语法分析 -> 预编译 -> 解释执行

一. 词法分析

核心:词法分析是将字符流(char stream)转换为记号流(token stream)。把输入的字符串分解为一些对编程语言有意义的代码块(词法单元)

词法分析主要有三个步骤

  1. 分析参数
  2. 再分析变量的声明
  3. 分析函数声明

开始前先上一段代码:

function func(age) {
    console.log(age);
    var age = 25;
    console.log(age);
    function age() {
    }
    console.log(age);
}
func(18);
复制代码

函数在运行的瞬间,生成一个活动对象(Active Object),简称 AO.

  1. 分析参数
  • 函数接收形式参数,添加到 AO 的属性,并且这个时候值为 undefine ,即 AO.age=undefine
  • 接收实参,添加到 AO 的属性,覆盖之前的 undefine.
  1. 分析变量声明

var age;var age=18;

  • 如果上一步分析参数中 AO 还没有 age 属性,则添加 AO 属性为 undefine,即 AO.age=undefine.
  • 如果AO上面已经有 age 属性了,则不作任何修改。
  1. 分析函数的声明
  • 如果有function age(){}把函数赋给AO.age ,覆盖上一步分析的值。

二. 语法分析

核心:会将上一步的词法单元集合分析并最终转换为一个由元素逐级嵌套所组成的代表了程序语法结构的树,即抽象语法树(AST) :::

想详细了解AST可移步至:AST

三. 预编译

核心:将上一步的AST转换为可执行代码

当JavaScript引擎解析脚本时,它会在预编译期对所有声明的变量和函数进行处理。并且是先预声明变量,再预定义函数。

四. 解释执行

在执行过程中,JavaScript 引擎是严格按着作用域机制(scope)来执行的,并且 JavaScript 的变量和函数作用域是在定义时决定的,而不是执行时决定的。JavaScript 中的变量作用域在函数体内有效,无块作用域;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值