五分钟——快速了解JS代码执行前的“预编译阶段”

莫名奇妙出现的"预编译阶段"

众所周知,JS是一种解释型语言而非编译型语言

(下面非常简要地说明一下两种区别)

简要区分编译型语言和解释型语言: 计算机是不能理解高级语言的,更不能执行高级语言,它只能理解机器语言,所以任何高级语言的程序想要运行,都必须先将其转化成计算机语言也就是机器码,而转换的方式有两种:

1.编译:在编译型语言的程序执行之前,需要一个专门的编译过程,将源代码编译成机器语言,以后再运行的时候可以直接使用编译结果

2.解释:解释型语言不需要预先编译,其直接将源代码解释成机器码并立即开始执行。

故作为解释型语言的JavaScript是不具有"预编译"阶段的,窃以为称之为"预处理"更加合适。但它究竟叫什么并不重要,重要的是为什么很多同学都认为JS存在"预编译"阶段,到底是JS的哪种行为导致不少同学都认为它产生了"预编译"呢?在此我们提出了疑问

Q:JS是一种解释型语言,所以预编译是子虚乌有的,那么是哪种行为让人们觉得它产生了预编译呢?
A: 因为词法环境和变量提升

词法环境与变量提升

在介绍词法环境之前,我们先看一下V8中JS编译执行过程,大体上可以看成三个阶段(只是大体上看成这三个阶段,实质上JS引擎要复杂的多,现在只是为了说明例子):

1.分词/词法分析阶段:分词是指将代码进行拆分,如var a = 2,将被拆分为var,a,=,2这样的符号;词法分析是指

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值