前言
先出一个十分常见的题目, 如下:
var age = 99;
function t() {
console.log(age)
var age = 100
}
t()
很明显, 这个题目会打印出undefined。 那么为什么呢?
很多人都会说: 因为变量提升啊, 这个时候没有赋值啊, 所以是undefined。 说的对, 那么变量提升又是怎样产生的呢?
一个函数的执行过程
很多书上说javascript是解释性语言, 但是javascript其实在执行之前是有一个编译过程的——词法分析。
对于一个函数执行分为了两个部分:
1. 编译过程——词法分析
2. 执行过程
词法分析需要分析三个内容:
1. 分析函数参数
2. 分析变量声明
3. 分析函数声明
具体步骤:
- 函数运行前的一瞬间, 生成Ac