关于javascript词法分析的自己的理解。

来源:互联网 发布:淘宝上的车秒贷靠谱吗 编辑:程序博客网 时间:2024/04/28 11:56

关于javascript词法分析的自己的理解。

例子一:

var d = “b”;
function a(b){
function b(b){
alert(b);
}
alert(b);
b(d);
}
a(1);

//最大外层分析阶段
oa.d = function a(b);
//执行的时候 oa.d = “b”;

当执行到a(1)时;

分析a(1)层
没有var声明变量
oa.b = undif
oa.b = funtion a(b);

//执行阶段
//函数体里面的所有变量都是先在所属层级oa里面先查找有没有对应的属性,如果有则就是这个属性值,如果没有
则继续向外层oa上寻找知道找到位置,这就是函数作用于的原理。直到找到最顶级oa。如果依然没有找到就报错。
弹出oa.b的funtion
执行到b(a)时进入
里层分析阶段
里层的oa
l_oa.b = undif
l_oa.b = d变量,a变量在当前oa属性里面找不到,继续向外层oa上寻找,在最外层oa上找到oa.d = “b”;
所以l_oa.b = 最外层oa.d = “b”;
没有var 声明,也没有funtion声明
执行alert(b),先查看里层oa,l_oa上有没有b属性,找到l_oa.b = 嘴外层oa.d = “b”所以就输 l_oa.b = “b”;

例子二:

var b = “b”;
function a(b){
function b(){
alert(b);
}
alert(b);
b();
}
a(1);

//外层分析阶段
oa.b = undif
oa.b = 1
没有var声明变量
oa.b = funtion;

//执行阶段
//函数体里面的所有变量都是先在所属层级oa里面先查找有没有对应的属性,如果有则就是这个属性值,如果没有
则继续向外层oa上寻找知道找到位置,这就是函数作用于的原理。直到找到最顶级oa。如果依然没有找到就报错。
弹出oa.b的funtion
执行到b(b)时进入
里层分析阶段
里层的oa
l_oa.b = undif
l_oa.b = 外层oa.b
执行alert(b),先查看里层oa,l_oa上有没有b属性,没有查找到l_oa.b ,继续向外层查找外层oa.b,找到外层oa.b属性
所有就输出外层oa.b 的funtion;

例子三:

var b = “b”;
function a(b){
function b(b){
alert(b);
}
alert(b);
b(b);
}
a(1);

//外层分析阶段
oa.b = undif
oa.b = 1
没有var声明变量
oa.b = funtion;

//执行阶段
//函数体里面的所有变量都是先在所属层级oa里面先查找有没有对应的属性,如果有则就是这个属性值,如果没有
则继续向外层oa上寻找知道找到位置,这就是函数作用于的原理。直到找到最顶级oa。如果依然没有找到就报错。
弹出oa.b的funtion
执行到b(b)时进入
里层分析阶段
里层的oa
l_oa.b = undif
l_oa.b = 外层oa.b
执行alert(b),先查看里层oa,l_oa上有没有b属性,查找到l_oa.b属性且 = 外层oa.b
所有就输出外层oa.b 的funtion;

0 0
原创粉丝点击