作用域链
function func(){
function a(){
function b(){
console.log("1");
}
b();
}
a();
}
// console.log("1");->b()->a()->func()
//一级一级向上查找,构成链式结构,称为作用域链
作用域链是用来做变量查找的,因此变量可以存储什么东西,链中就应该有什么东西,就是,链里面存储的是各种对象,可以将其想象成对象的序列(数组)
绘制作用域链的规则
1. 将所有的 script 标签作为一条链结构,标记为 0 级别的链
2. 将全局范围内,所有的声明变量名和声明函数名按照代码的顺序标注在0级链中
3. 由于每一个函数都可以构成一个新的作用域链,所以每一个0级链上的函数都延展出1级链
4. 分别在每一个函数中进行以上操作,将函数中的每一个名字标注在1级链中
5. 每一条1级链中如果有函数,可以再次延展出2级链,一次类推
分析代码的执行
1. 根据代码的执行顺序(从上往下,从左至右)在图中标记每一步变量数据的变化
2. 如果需要访问某个变量,直接在当前n级链上查找变量,查找的方式为无序
3. 如果找到变量,直接使用,如果没有找到变量,去上一级 n-1 中查找
4.一直找下去 ,至到0级链,如果0级链就报错,xxx is not defined