zoukankan      html  css  js  c++  java
  • javascript变量声明提升和函数声明提升

     在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。

    JS的解析过程分为两个阶段:预编译期(预处理)与执行期。

     预编译期JS会对代码块中的所有声明的变量和函数进行处理(类似与C语言的编译),但需要注意的是此时处理函数的只是声明式函数,而且变量也只是进行了声明但未进行初始化以及赋值。
    console.log(a);//undefined
    if (!("a" in window)) {
      console.log(1)
        var a = 1;
    }
    console.log(a);//undefined
    

      

    function b (x) {
        return x * 2;
    }
    var b;
    console.log(b);//ƒ b (x) {return x * 2;}
    

      

    console.log(f1()); //aa、aaa
    console.log(f2);  //undefined
    function f1() {console.log('aa');return 'aaa';} 
    var f2 = function() {}
    

      

    alert(a);//function a(){alert(10);}
    a();//10
    var a=3;
    function a(){
       alert(10);
    }   
    alert(a)//3
    a=6;
    a();//TypeError: a is not a function

     

    function test(){
        console.log("函数声明");
    }
    var test;
    console.log(test);   
    test = "变量";
    

      

    上面代码打印结果:

    ƒ test(){
    console.log("函数声明");
    }
    函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖。

     总结:

    1、js声明会提升,初始化不会提升!

    2、js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!

  • 相关阅读:
    SQL2008性能计数器注册表配置单元一致性失败
    win8 下 IIS APPPOOLDefaultAppPool 登录失败的解决方法
    Win8 x64环境下VS2010 C#工程运行报错:没有注册类 (异常来自 HRESULT:0x80040154
    编辑距离
    UVA 147 Dp(完全背包)
    poj 1141 Brackets Sequence
    hdu2612 Find a way BFS
    I
    javascript--运算符
    javascript--变量
  • 原文地址:https://www.cnblogs.com/imelemon/p/7687382.html
Copyright © 2011-2022 走看看