• javascript代码解释执行过程


    javascript是由浏览器解释执行的脚本语言,不同于java c,需要先编译后运行,javascript 由浏览器js解释器进行解释执行,总的过程分为两大块,预编译期和执行期

    下面的几个demo解释了js解释器对变量和代码的解释过程

    //#demo1
    foo();//alert(1)
    function foo(){//声明式函数
      alert(1);
    }
    foo2();//undefined is not a function 
    var foo2 = function(){//赋值式函数声明,其实是函数表达式
      alert("foo2");
    };
    //#demo2
    alert(str);//undefined
    var str="str";
    alert(str);//str

    js执行过程分为与编译期和执行期(以代码块为单位,边解释边执行),在预编译期,js解释器会对本代码段内所有的 声明的变量和方法进行处理,将变量和方法提到对应的作用域的最前面,该过程只是对变量进行声明,并不会进行初始化或者赋值(缺省值默认为undefined)

    //#demo1中声明式函数与赋值式函数区别在于 声明式函数会在预编译期被整体提到作用域前面,所以其实#demo1经过预编译后代码如下:

    var foo2; //缺省值是'undefined'
    function foo(){
     alert(1);
    }
     foo();
    foo2();//undefined is not a function 
    foo2 = function(){
      alert('foo2');
    };

    JavaScript 中局部变量只可能通过两种方式声明,一个是作为函数参数,另一个是通过 var 关键字声明。 var 表达式和 function 声明都将会被提升到当前作用域的顶部,看一下#demo3

    bar();
    var bar = function() {};
    var someValue = 42;
    
    test();
    function test(data) {
        if (false) {
            goo = 1;
    
        } else {
            var goo = 2;
        }
        for(var i = 0; i < 100; i++) {
            var e = data[i];
        }
    }

    上面代码在运行之前将会被转化。JavaScript 将会把 var 表达式和 function 声明提升到当前作用域的顶部。

    var bar,someValue;
    function test(data){
      var goo,i,e;
      if(false){
        goo = 1;
      } else{
        goo = 2;
      }
      for(i=0;i<100;i++){
        e = data[i];
      }
    }
    bar();//undefined
    bar = function(){};
    someValue = 42;
    test();

    当访问函数内的 goo 变量时,JavaScript 会按照下面顺序查找:

    1.当前作用域内是否有 var goo的定义。 2.函数形式参数是否有使用 goo名称的。 3.函数自身是否叫做 goo。 4.回溯到上一级作用域,然后从 #1 重新开始

  • 相关阅读:
    Socket网络通讯
    Redis事务/持久化/发布订阅
    Redis主从复制和哨兵机制
    java8新特性Lambda(1)
    【指标测试】影响IOPS的几个重要因素
    win7:Remote Desktop Services 启动失败
    centos 6.4 安装视频解码器
    [RVM is not a function] Interating RVM with gnome-terminal
    bzoj 2179: FFT快速傅立叶 -- FFT
    bzoj 3389: [Usaco2004 Dec]Cleaning Shifts安排值班 -- 贪心
  • 原文地址:https://www.cnblogs.com/teamobaby/p/3839965.html
Copyright © 2020-2023  润新知