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

JS词法与作用域解析
本文通过三个示例详细解析了JavaScript中词法分析的过程及函数作用域的原理,展示了变量查找机制。

关于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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值