javascript词法分析自己的个人理解。

本文通过三个JavaScript示例详细解析了闭包的概念及其工作原理,重点介绍了如何在不同层级的作用域中查找变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子一:


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、付费专栏及课程。

余额充值