变量提升
变量提升是指:js会将变量声明提升到变量所在作用域的最顶端。
用let声明的变量,const声明的常量不会发生变量提升。
// 这里将a声明提升到了当前作用域的最顶端
console.log(a); // undefined
var a = 123;
console.log(b); // error: b is not defined
let b = 321;
函数的提升
只有函数声明的方式才会发生函数声明提升。
fn1(); // 这里是fn1
fn2(); // Error: fn2 is not defined
function fn1() {
console.log('这里是fn1')
}
var fn2 = function () {
console.log('这里时fn2')
}
变量提升和函数提升的优先级
同名情况下,函数提升优先于变量提升。
console.log(fn3); // ƒ fn3() { console.log('这里是fn3'); }
var fn3 = 123;
function fn3() {
console.log('这里是fn3');
}
console.log(fn4); // ƒ fn4() { console.log('这里是fn4'); }
function fn4() {
console.log('这里是fn4');
}
var fn4 = 123;