变量提升和函数提升

33 阅读1分钟
console.log(a); // undefined
var a;
var a = '123';

a(); // a is not a function
var a = function() {
    console.log('aaa');
}
var a = function() {
    console.log('a1a1a1');
}
// 同名变量忽略原则:变量只提升声明,不提升值。默认为undefined
b(); // b1b1b
function b() {
    console.log('bbb');
}

function b() {
    console.log('b1b1b');
}
// 同名函数覆盖原则:同名的函数,先声明的会被覆盖
c(); // function c
var c = function() {
    console.log('cccc');
}

function c() {
    console.log('function c');
}
c(); // cccc
/* 同名的函数和变量,函数声明会提升到变量声明之前
    等同于
    function c() {
        xxx
    }
    var c 被忽略
    c();
    c = function() {
        xxx
    }
    c();
*/