• js高级之函数运行词法分析


    1.函数运行的词法分析具体步骤如下:
    先说明函数运行的瞬间,会给此函数生成一个Active Object,即AO活动对象,作用域内能找到的所有变量都在AO上。
    分析
    1.接收参数,以参数名为属性,参数值是属性值。
    2分析var的声明,如果和参数名同名,分析时是不会影响的。
    3分析函数的声明,如果和参数名同名,分析的时候同名的属性将会被覆盖
    以上只是分析,具体的结果还得在执行后才得到。

    2.代码加分析如下

    1.

    // 在这里运用词法分析法来分析和执行最终的到结果:两次输出的都是函数
    // 0:得到a.AO={};
    // 1.分析参数,得到a.AO={b:1},没有则略过.
    // 2.分析var声明,如果和参数同名分析是不影响,.没有则略过这时:
    //a.AO={b:1};
    // 3.分析函数声明,如果和参数名同名则覆盖,没有则略过
    // 这时a.AO={b:function(){}}
    // 分析结束然后执行:
    // 执行到10行 结果是a.AO={b:function(){}},所以先输出的是一个函数;
    // 执行到11行的时候又用到词法分析了具体如下:
    // 0.得到b.AO={};
    // 1.略过
    // 2.略过
    // 3.略过
    // 所以得到的还是一个空对象b.AO={};
    // 执行到14行时,在b.AO={}上找不到b,它会跟作用域链向上找,所以找到a.AO={b:function(){}}
    // 执行的结果还是一个函数.

    2.

    // 在这里运用词法分析法来分析和执行最终的到结果:第一次输出1,第两次输出的是函数

    // 0:得到a.AO={};
    // 1.分析参数,得到a.AO={b:1},没有则略过.
    // 2.分析var声明,如果和参数同名分析是不影响,.没有则略过,这时:
    // a.AO={b:1};
    // 3.分析函数声明,如果和参数名同名则覆盖,没有则略过
    // 这时a.AO={b:1};
    // 分析结束然后执行:
    // 执行到35行 结果是a.AO={b:1};,所以先输出的是1;
    // 执行到36行的时候只进行了赋值所以b=function(){},a.AO.b=function(){}

    //执行39行函数调用时先用到词法分析了具体如下:
    // 0.得到b.AO={};
    // 1.略过
    // 2.略过
    // 3.略过
    // 所以得到的还是一个空对象b.AO={};
    //再执行, 在b.AO={}上找不到b,它会跟作用域链向上找,所以找到a.AO.b=function(){}
    // 执行的结果是一个函数.

  • 相关阅读:
    【刷题】Linux修改权限命令
    【刷题】Linux进程通信方式
    【刷题】网络:TCP与UDP
    【刷题】SQL基本操作
    【刷题】数据库三大范式
    【刷题】java会不会内存泄漏
    【刷题】Java-重写和重载
    【刷题】Java面向对象概述
    【刷题】Java垃圾回收常见问题
    测试常见问题合集
  • 原文地址:https://www.cnblogs.com/zhuzhu88/p/6636924.html
Copyright © 2020-2023  润新知