您现在的位置: 万盛学电脑网 >> 程序编程 >> 网页制作 >> 网页设计 >> 正文

分析Javascript 全局与局部作用域解析、作用域链

作者:佚名    责任编辑:admin    更新时间:2022-06-22

class="area"> 分析Javascript 全局与局部作用域解析、作用域链:<script>

alert(a);        //undefault

var a = 1;

function fn1(){
        
        alert(a);   //undefault
        
        var a = 2;  
        
        alert(a);   //2
}


fn1();

</script>
一.JS解析器 (相当于把:var\function\参数 这3样东西 提前解析放到一个仓库里)
        1.‘找一些东西’:var\function\参数 (找这3样东西)
       所有变量在代码运行之前,都提前赋一个值:未定义(undefault)

       开始找全局var : 找到一个 var a = 未定义。  (只有一个)
       开始找全局function : 找到一个 fn1 = function fn1(){
        
                                        alert(a);

                                        var a = 2;

                                        alert(a);
                                    }。 (只有一个)
      开始找 ‘参数’,没有。

      到这里JS解析完成。

      接下来就开始第二步(逐行解读代码);







二.逐行解读代码
        1.开始读代码
      读到 alert(a) 查看解析器(仓库)是否有a的存在,如果有就输出,结果是个undefault;
      读到 var a = 1 查看解析器(仓库)是否有a的存在,如果有就修改,结果 a 变成了 1; (说明,表达式可以修改解析器同名的变量);

      读到 fn1,这里是关键,因为这里是局部作用域,所以又会再次的进行。JS解析器、逐行解读代码。
              一.JS解析器
                开始找局部var : 找到一个 var a = 未定义。  (只有一个);
            没有function 也没有 参数 结果

        二.逐行解读代码

                读到fn1()时,开始运动

                读到 alert(a) 查看局部解析器(仓库)是否有a的存在,如果有就输出,结果是个undefault;
            读到 var a = 2 查看解析器(仓库)是否有a的存在,如果有就修改,结果 a 变成了 2; (说明,表达式可以修改解析器同名的变量);
            读到 alert(a) 查看局部解析器(仓库)是否有a的存在,如果有就输出,结果a 是存在的,因上一步a的值被修改为2; 




以上便是 预解析过程, 不知道这样写能不能明白