读书笔记-你不知道的JS上-声明提升

变量声明提升

  Javascript代码一般情况下是由上往下执行的,但是有些情况下不成立。

    a = 2;
    //变量声明被提升在当前作用域顶部
    var a;
    console.log(a); //2
    console.log(b); //undefined
    //同样被提升
    var b;

  如果同时有函数声明与变量声明呢?

    console.log(a); //funciton a(){}
    var a;
    //函数先提升 变量后提升 因此变量的声明被忽略
    function a() {}

  两个函数声明呢?

    fn(); //输出了2!

    function fn() {
        console.log(1);
    }
    //后声明的函数覆盖了前面的函数
    //可以理解为 var a = 1; var a = 2
    function fn() {
        console.log(2);
    }

  另外一个案例在chrome中报错了,估计是浏览器优化过,但是不在判断语句中声明函数是一个好的习惯。

    fn(); //error
    var a = true;
    if (a) {
        function fn() {
            console.log(1);
        }
    } else {
        function fn() {
            console.log(2);
        }
    }
原文地址:https://www.cnblogs.com/QH-Jimmy/p/6445140.html