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

    javascript 执行过程

    我们着重说下预编译

    预编译有全局预编译和函数预编译

    函数预编译发生在函数执行的前一刻

    预编译不受if等逻辑判断的影响,正常按照规则执行预编译

    预编译

    函数申明整体提示  变量申明提升

    预编译不仅发生在函数体,还发生在全局。全局没有第三部,第一部创建GO

    一切申明的全局变量,全是window的属性

     1         //任何申明的全局变量,归window所有  全是window的属性
     2         var a = 123;
     3         //预编译赋值给Window对象
     4         //  window{
     5         //      a:123
     6         //  }
     7         //window.a和a之间有了引用联系
     8         a = 10;
     9         window.a = 10;
    10         console.log(a)//window.a

    如果变量未经申明就赋值,此变量为window的属性

    1         function test(){
    2             //从右向左赋值  这样的  b未经赋值  b归window所有
    3             var a = b = 123;
    4         }
    5         test();
    6         console.log(window.b);

    预编译过程

    1、创建AO对象(执行期上下文)
    2、找形参和变量申明,将变量和形参名作为AO属性名,值为Undefined
    3、将实参值和形参统一
    4、在函数体里面找函数申明,值赋予函数体
     
     1         //1、创建AO对象
     2         //2、找形参和变量申明,作为AO属性名赋值undefined
     3         //AO{
     4         //    foo:undefined
     5         //}
     6         //3、实参和形参统一
     7         //4、找函数申明体,值赋予函数体
     8         //AO{
     9         //    foo:function foo(){}
    10         //}
    11         //输出应该是函数体
    12         function bar(){
    13             return foo;
    14             foo=10;
    15             function foo(){}
    16             var foo=11;
    17         }
    18         console.log(bar());
     
  • 相关阅读:
    每天一个linux命令(6):mv命令
    每天一个linux命令(5):rm 命令
    每天一个linux命令(4):mkdir命令
    每天一个linux命令(3):pwd命令
    每天一个linux命令(2):cd命令
    每天一个linux命令(1):ls命令
    Linux下svn命令详解
    Linux下SVN安装配置
    SVN命令使用详解
    分布式Web服务器架构
  • 原文地址:https://www.cnblogs.com/FashionDoo/p/10298355.html
Copyright © 2011-2022 走看看