总所周知,js在运行时,会有三个阶段,分别是:
- 词法分析阶段(检测代码中是否含有明显的语法错误)
- 预编译阶段
- 解释执行阶段
其中,所谓的预编译阶段,就是在内存中开辟一些空间,存放一些变量与函数对这些内存中每一个通道进行编译。从代码的层面来看,预编译阶段给代码的执行提供了执行期上下文(执行环境)。
在js语言中,预编译分为两种:
- 全局的预编译,这种预编译只有在代码执行前进行一次
- 局部的预编译,这种预编译会在函数调用时进行,会进行多次
首先,让我们先来看一段代码:
<script>
var a = 1;
console.log(a);//1
console.log(b);//undefined
fn(1,2);//3 2 2
function fn(a,c){
var a = 3;
var b = 2