zoukankan      html  css  js  c++  java
  • js预编译

    每次面试当拿到这样的题,你会轻松的都将它搞定吗?

    function test1(a, b) {
        console.log(a);  
        c = 0;
        var c;
        a = 3;
        b = 2;
        console.log(b); 
        function b() {}
        function d() {}
        console.log(b); 
    }
    test1(1);

    如果上面问题你都可以轻松搞定,那么请略过此篇文章,有疑惑的小伙伴可以跟我仔细探究一下了。

    这就不得不说说js的预编译了,js代码的执行是读一行代码执行一行,但在执行之前系统会先对js进行全面扫描检查是否存在低级的语法错误,并不会立即执行语句。预编译是发生函数执行的前一刻,简单总结了四句话:1. 创建AO对象(执行期上下文); 2. 找形参和变量声明, 作为AO对象属性值, 值为 undefined;3. 将形参 和实参相统一;4. 找函数声明,值赋予函数体;以上面的例子为例:

    第一步: AO {

      

    }

    第二步: AO {

      a: undefined;

      b: undefined;

      c:undefined;

         }

    第三步:AO {

      a:1;

        b: undefined;

      c:undefined;

    }   

    第四步: AO {

           a:1;

        b: function b() {};

      c:undefined;

      d:functoiin d() {};

    } 

    当test函数执行后,a=1; b=2; 这时候我们不必再为function b() {}这样的函数声明烦恼了,因为在js预编译的时候已经执行了。预编译的四部曲是不是很简单搞定问题~~

  • 相关阅读:
    Linux如何同步时间/更新时间
    Linux关机/重启/及注销命令
    Linux如何查看别名和取消别名
    Linux查看历史记录
    Linux命令行快捷键有哪些
    win10产品密钥 win10永久激活密钥(可激活win10所有版本 )
    Xshell如何连接
    Xshell6 优化
    逻辑运算符
    可变类型与不可变类型
  • 原文地址:https://www.cnblogs.com/linxing/p/11059865.html
Copyright © 2011-2022 走看看