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

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

    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);
    复制代码
  • 相关阅读:
    JavaScript按纯数字排序
    用jQuery监听浏览器窗口的变化
    jquery-jtemplates.js模板应用
    art-template模板应用
    JavaScript判断当前手机是Android还是iOS系统
    JavaScript数组转字符串,字符串转数组
    JavaScript数字转字符串,字符串转数字
    Play framework 安装
    JQuery判断数组中是否包含某个字符串
    js获取页面宽度高度及屏幕分辨率
  • 原文地址:https://www.cnblogs.com/axl234/p/5519199.html
Copyright © 2011-2022 走看看