zoukankan      html  css  js  c++  java
  • js词法分析

    在函数运行时, 会先进行词法分析(预编译) 预编译做哪些工作?

    1:分析参数

    2:分析变量声明

    3:分析函数声明

    如何分析变量声明?

    答:对于var 声明的变量, 以var str = 'local'为例, 分为分析过程 和 执行过程.

    先分析, 后执行.

    先分析  var str;     ,即仅仅声明一个str变量,str变量此时,没有赋值,值是undefined

    然后再进行 执行过程.

    var str = 'global';
        function t() {
            /*
            alert(str); // undefined
            var str = 'local';
            alert(str); // local
            */
    
    
    
            ///  词法分析
            var str;
    
            // 执行语句
            alert(str);
            str = 'local';
            alert(str;);
    
        }
    
        t();

      活动对象/激活对象, Active Object  

      函数的变量 有其作用域,  

    即, 引用某变量时,在某个范围内查询该变量,   这个范围,又在哪儿?

      在AO上找

      在函数调用的瞬间,会产生一个AO,   这个AO对象,的属性, 即存储着该函数所能引用到的变量.

    function fn1(age,hei) {
        var age;
        alert(age); // 32
        alert(hei); // undefined
    }
    
    fn1(32);
    function fn1(age,hei) {
        var age;
        alert(age);
        function age() {
            alert('hehe');
        }
    }
    
    fn1(32);
    
    /*
    //词法分析过程
    AO:{}
    AO:{age:undefined,hei:undefined}
    AO:{age:32,hei:undefined}
    AO:{age:function(){alert('hehe')},hei:undefined}
    
    // 执行:
    alert(age); --->AO.age--->函数
    */
     function t(age) {
            alert(age);  // 99
            var age = 12;
            alert(age);  // 12
        }
    
        t(99);
    
       AO:{age:undefined}   // 词法分析形参得到
       AO:{age:99}         // 实参赋值 AO.age属性
       AO:{age:12}         // 修改AO.age的值
    function a(b) {
       alert(b);  // function b(){}
       function b(){
            alert (b);  // 
        }
        b();
    }
    
    a(1);
    
    /*
    //词法分析过程
    a:AO:{}
    a:AO:{b:undefined}
    a:AO:{b:function}
    
    b:AO {}
    b:AO.b --->{}--->a:AO
    
    
    // 执行:
    alert(age); --->AO.age--->函数
    */
    // 函数声明 与函数表达式
    
    
        // 函数表达式
        function fn1(age,hei) {
            alert(age);   
            
            var age = function () {
                alert('hehe');
            }
    
            alert(age); 
        }
        
        // undefined, function
        // function,function
        // 32, function (正确)
    
        fn1(32);
    
    
        // 函数声明
        function fn1(age,hei) {
            alert(age);   
            
            function age () {
                alert('hehe');
            }
    
            alert(age); 
        }
        
        // undefined, function
        // function,function (正确)
        // 32, function
    
        fn1(32);
  • 相关阅读:
    把EXE可执行文件等作为资源包含在Delphi编译文件中
    delphi怎么做桌面滚动文字?
    cxGrid控件过滤筛选后如何获更新筛选后的数据集
    我的ecshop二次开发经验分享
    ECSHOP 数据库结构说明 (适用版本v2.7.3)
    cxGrid 怎样才能让不自动换行 WordWrap:=false
    vi notes
    ODI中显示us7ascii字符集的测试
    ODI 11g & 12c中缓慢变化维(SCD)的处理机制
    ODI中的临时接口
  • 原文地址:https://www.cnblogs.com/leejersey/p/2775086.html
Copyright © 2011-2022 走看看