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;
以上便是 预解析过程, 不知道这样写能不能明白