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

    javascript词法分析
    函数在运行的瞬间,生成一个活动对象(Active Object),简称AO;
    具体分为两个阶段:
    一.分析阶段
    JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤:
     
    1.分析参数
    2.分析变量声明
    3.分析函数声明
    二.执行阶段 (即做赋值等操作)
     
    具体例子及简单分析步骤如下:
    *1.无参数情况*
    1 function func() {
    2       console.log(age);
    3       var age = 25;
    4       console.log(age);
    5       function age() {
    6       }
    7       console.log(age);
    8   }
    9 func();
    1.1详细分析步骤
    // 分析阶段
    形成活动对象AO, 假设 AO = {};
    1)分析参数
    a.分析形参(没有跳过)
    b.分析实参(没有跳过)
    2)分析变量声明
    a. AO.age = undefined;(在函数分析阶段默认往AO活动对象添加属性值为undefined);
    3) 分析函数声明
    a. AO.age = function(){};(如果AO中已存在age属性直接做覆盖操作,如果不存在则新建age属性进AO)
    // 执行阶段
    1.打印 function() {};
    2.age赋值25 AO.age = 25;
    3.打印 25;
    4.打印 25;
     
    **//以下例子同上类似步骤简写分析**
    *2.有参数情况*
    1 function func(age) {
    2       console.log(age);
    3       var age = 25;
    4       console.log(age);
    5       function age() {
    6       }
    7       console.log(age);
    8   }
    9 func(18);
    2.1
    // 分析阶段
    1)分析参数
    a. AO.age = undefined;
    b. AO.age = 18;
    2)分析变量声明
    AO.age = 18; (AO中已存在age属性)
    3.分析函数声明
    AO.age = function() {};
    //执行阶段
    1.打印 function() {};
    2.赋值后打印 AO.age = 25;
    3.打印 25;
     
    *3.报错情况*
     1 function func(age) {
     2       var age;
     3      console.log(age);
     4       var age = 25;
     5       console.log(age);
     6       function age() {
     7           console.log(age);
     8       }
     9       age();
    10      console.log(age);
    11  
    12  }
    13 func(18);
    3.1
    // 分析阶段
    1.分析参数
    a. AO.age = undefined;
    b. AO.age = 18;
    2.分析变量声明
    AO.age = 18;(AO中已存在,保持不变);
    3.分析函数声明
    AO.age = function() {}; (存在age属性覆盖)
     
    //执行阶段
    1.打印 function() {};
    2.赋值后打印 25;
    3. age is not a function;(执行函数时AO的age已经为25)
    4. 报错不执行;
     
    *4.变量提升情况*
    1 var name = "test";
    2 function t() {
    3     console.log(name);
    4     var name = "test1";
    5     console.log(name);
    6 }
    7 t();
    类似写法
    var name = "test";
    function t() {
        var name;
        console.log(name);
        name = "test1";
        console.log(name);
    }
    t();

    4.1

    // 分析阶段
    1.分析参数(没有参数跳过)
    2.分析变量声明
    AO.name = undefined;
    3.分析函数声明(没有跳过)
     
    //执行阶段
    1.打印 undefined;
    2.赋值后打印 test1;
     
    注:
    1.函数声明在分析阶段操作
    2.函数表达式在执行阶段操作
     
  • 相关阅读:
    二分练习题4 查找最接近的元素 题解
    二分练习题5 二分法求函数的零点 题解
    二分练习题3 查找小于x的最大元素 题解
    二分练习题2 查找大于等于x的最小元素 题解
    二分练习题1 查找元素 题解
    code forces 1176 D. Recover it!
    code forces 1173 B. Nauuo and Chess
    code forces 1173 C. Nauuo and Cards
    吴恩达深度学习课程笔记-15
    吴恩达深度学习课程笔记-14
  • 原文地址:https://www.cnblogs.com/jiaqi1719/p/10019689.html
Copyright © 2011-2022 走看看