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

    JS执行三部曲

    1.语法分析。系统会通篇扫描代码,查看是否有代码的语法错误。

    2.预编译.分析结束后,就会进行预编译。

    3.解释执行

    function test(){
        consoel.log("a");
    }
    
    test();// a

    上面test()代码很明显是可以执行结果是a

    但是如果这样那?

    test();
    function test(){
        consoel.log("a");
    }

    能输出吗?可以,那么疑问来了JS不是解释语言吗?test()在执行的时候,函数test应该还没有定义但是为什么能够执行出来结构那?这就是预编译做的事情。

    再来一个

    console.log(a);// undefined
    
    var a = 10;

    现在为什么a变量输出结果是nudefined报错显示。他不是应该没有定义报错吗?那么这是什么原因,可以给你说这是预编译这哥们做的。

    为什么现在给你两句话:

    1.函数声明整体提升

    2.变量 声明提升

    就是你写一个函数,不管你写在哪里系统总是会把函数提升带代码逻辑最前面。

    --以上的是函数的执行上下文

    还有全局的执行期上下文:(GO),只不过比函数的执行期上下文少了一步,第三部,实参形参相统一。第一步变成了胜场GO对象。

    其实GO就是window

    所以说你在全局中声明一个变量a;然后console.log(a);就是去GO中访问a也就是window.a;先生成GO,全局的GO生成在全局执行的前一刻。

    console.log(test);
    
    function test(test){
        console.log(test);//fu
        var test=234;
        console.log(test);//234
        function test(){}  
    }
    
    test(1);
    
    var test=2;

    GO{

      test : undefined

    }

    GO{

        test : function test(test){

        //...

        }

    }第一行代码结果就是:

    function test(test){

        //...

        }

    执行test(1);

    先 生成AO{

        test : undefined

    }

    预编译不会看if语句的括号

  • 相关阅读:
    python中的time模块
    CSS 布局
    8 Function类型
    2 node 核心
    1 node 简介
    13 对象
    JS 算法一
    JS 模块化
    1 谈谈section标签
    JS 练习一
  • 原文地址:https://www.cnblogs.com/-alvin/p/9782603.html
Copyright © 2011-2022 走看看