js 作用域链

作用域链

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

猜你喜欢

转载自blog.csdn.net/qq_38677540/article/details/82657679