深入理解JavaScript——词法环境

前言

在说一个概念前,我们需要确定它的前提,此文以 ECMAScript5 为基础撰写

一句话解释

词法环境就是在 JavaScript 代码编译阶段记录变量声明、函数声明、函数声明的形参的合集

JavaScript 的编译过程

在介绍词法环境前,我们先看下在 V8 里 JavaScript 的编译执行过程,大致分为三个阶段

第一步:V8 引擎刚拿到 执行上下文 的时候,会把代码从上到下一行一行的先做分词/词法分析(Tokenizing/Lexing)。分词是指:比如 var a = 2; 这段代码,会被分词为:var a 2;这样的原子符号(atomic token);词法分析是指:登记变量声明、函数声明、函数声明的形参

第二步:在分词结束以后,会做代码解析,引擎将 token 解析翻译成一个 AST(抽象语法树), 在这一步的时候,如果发现语法错误,就会直接报错不会再往下执行

第三步:引擎生成 CPU 可以执行的机器码

在第一步里有个词法分析,它用来登记变量声明、函数声明、函数声明的形参,后续代码执行的时候就知道去哪里拿变量的值和函数了,这个登记的地方就是Lexical Environment(词法环境)

——深入理解 JavaScript-词法环境

总结一下:引擎会在解释 JavaScript 代码之前首先对其进行编译。编译器的一部分工作就是找到所有的声明,并用合适的作用域将它们关联起来

我们先升到一万米高空,看一下整个 JavaScript 的执行生命周期

JavaScript 的执行生命周期分成两个阶段,编译阶段执行阶段

  • 编译阶段由编译器完成,它将代码翻译成可执行代码,这个阶段能知道全部标识符在哪里、如何声明的以及作用域规则* 编译阶段进行变量声明* 编译阶段变量声明进行提升,但是指为 undefined* 编译阶段所有非表达式的函数声明进行提升
  • 代码执行阶段即执行可运行代码࿰
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值