• JavaScript词法分析步骤


    JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤:

    • 分析参数
    • 再分析变量的声明
    • 分析函数声明

    具体步骤如下:

    • 函数在运行的瞬间,生成一个活动对象(Active Object),简称AO
    • 第一步:分析参数:
    1. 函数接收形式参数,添加到AO的属性,并且这个时候值为undefine,即AO.age=undefine
    2. 接收实参,添加到AO的属性,覆盖之前的undefine
    • 第二步:分析变量声明:如var age;或var age=18;
    1. 如果上一步分析参数中AO还没有age属性,则添加AO属性为undefine,即AO.age=undefine
    2. 如果AO上面已经有age属性了,则不作任何修改
    • 第三步:分析函数的声明:
    • 如果有function age(){}把函数赋给AO.age ,覆盖上一步分析的值

    应用例子

    var age = 18;
    function foo(){
      console.log(age);
      var age = 22;
      console.log(age);
    }
    foo();       运行结果undefined,22
    

     分析:第一步,没有形参和实参,第二步AO没有age属性,AO.age=undefined,第三步,没有函数的声明。开始执行,第一个打印undefined,var age=22赋值给age,

    第二次打印出22

     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 }
    10 func(18);
    

     分析:第一步,有形参AO.age=undefined,第二步,有实参,AO.age=18,遇到var age = 25;不变,遇到function age() { },AO.age=function  age(){  }

    打印结果为function  age(){  }   25    25

    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);
    

     报错,age不是一个方法,此时age是25

    
    
     1 function func(age) {
     2     var age;
     3     console.log(age);
     4     function age() {
     5         console.log(age);
     6     }
     7     age();
     8     console.log(age);
     9 
    10 }
    11 func(18);
    
    
    

     打印出四个function  age(){

        console.log(age)

    }

    1 function func(age) {
    2     console.log(age);
    3     var age = function age() {
    4         console.log(age);
    5     };
    6     age();
    7     console.log(age);
    8 }
    9 func(18);
    

     

    I can feel you forgetting me。。 有一种默契叫做我不理你,你就不理我

  • 相关阅读:
    jQuery
    数据库的并发操作
    Python之禅
    pymysql模块初见
    数据库之表查询
    实体与实体之间的联系
    数据库初识
    进程池 协程 与I/O模型
    GIL全局解释锁.死锁与递归锁
    进程通信与线程初识
  • 原文地址:https://www.cnblogs.com/weidaijie/p/10344366.html
Copyright © 2020-2023  润新知