zoukankan      html  css  js  c++  java
  • 第4章提升

    
    a = 2;
    var a;
    console.log(a);//输出的是2
    
    
    // 它等价于
    var a;
    a=2;
    console.log(a);//2
    ================
    
    console.log(a)
    var a=2;//输出undefined
    
    
    等价于
    var a;
    console.log(a)
    a=2;
    
    因为var具有提升;
    提升:在预编译阶段,编译器会把所有定义的变量提升到最顶部,但是值还是保留在原来的位置上;
    
    
    foo();
    function foo(){
        console.log(a);//输出undefined
        var a=2;
    }
    
    
    等价于
    function foo(){
        var a;
        console.log(a);//输出undefined
        a=2;
    }
    foo();
    
    说明了函数声明,和var 声明的变量都有提升;
    
    foo();
    var foo=function bar(){
        //do something()
    }
    
    因为这是一个函数表达式;函数表达式不会被提升,所以会报错;
    
    函数声明和变量声明都会被提升,但是函数会首先被提升,然后才是变量
    
    foo();
    var foo;
    function foo(){
        console.log(1);
    }
    foo=function(){
        console.log(2);
    }
    
    等价于
    function foo(){
        console.log(1);   
    }
    foo(); //输出1
    var foo;
    foo=function(){
        console.log(2);
    }
    
    var a = 10;
    function a() {};
    console.log(typeof a);//number
    
        它等价于
    function a() {};
    var a = 10;
    console.log(typeof a);//number
    因为:函数声明和变量声明都会被提升,但是函数会首先被提升,然后才是变量
    
    console.log(a);    //f a(){console.log('hi');}
    console.log(b);    //undefined
    function a() {
      console.log('hi');  
    }
    var b = function() {
      console.log('ok');  
    }
    
    
    它等价于
    function a() {
      console.log('hi');  
    }
    var b;//undefined;
    console.log(a);    //f a(){console.log('hi');}
    console.log(b);    //undefined
    b = function() {
      console.log('ok');  
    }
    
    记住预编译
    
    二者优先级:函数提升会优先于变量提升,而且不会被同名的变量覆盖.
    但是,如果这个同名变量已经赋值了,那函数变量就会被覆盖。
    当二者同时存在时,会先指向函数声明。
    
    
    console.log(a);    //f a() {...}
    console.log(a());    //2
    var a = 1;
    function a() {
      console.log(2);  
    }
    console.log(a);    //1
    a = 3;
    console.log(a());    //报错,现在的函数a已经被赋值过后的变量a给覆盖了,无法再调用a()
    
        等价于
    function a() {
      console.log(2);  
    }
    var a;
    console.log(a);    //f a() {...}
    console.log(a());    //2
    a = 1; //同名变量已经赋值了,那函数变量就会被覆盖。
    console.log(a);    //1
    a = 3;
    console.log(a());    //报错,现在的函数a已经被赋值过后的变量a给覆盖了,无法再调用a()
    
    
    
    在读第4章的时候,提升这一章的时候,我就比上一章好些,很多地方都懂,
    淡然这一章节一点都不难,我之前也很清楚这一章。
    但是还有一个地方不是特别的懂!
    
    参考的地址
    https://blog.csdn.net/sunlizhen/article/details/99844964
    https://www.cnblogs.com/hey-Sarah/p/13449699.html
    
  • 相关阅读:
    xamp配置多域名站点
    POJ1611-The Suspects-ACM
    POJ2524-宗教问题-并查集-ACM
    POJ3274-牛的属性-HASH-ACM
    拓扑排序-DFS
    拓扑排序
    POJ1007-DNA Sorting-ACM
    POJ1258-Agri-Net-ACM
    wdcp-apache配置错误导致进程淤积进而内存吃紧
    wdcp-apache开启KeepAlive提高响应速度
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/13466812.html
Copyright © 2011-2022 走看看