一、变量提升
1、全局作用域
console.log(num); // undefined
var num = 666;
等价于
var num;
console.log(num); // undefined
var num = 666;
2、函数作用域
function getNum() {
console.log(num); // undefined
var num = 666;
}
getNum();
等价于
function getNum() {
var num;
console.log(num); // undefined
var num = 666;
}
getNum();
二、函数提升
fun();
var fun = function () {
console.log(111);
};
// 输出结果:Uncaught TypeError: fn is not a function
// 因为fun是一个变量,提升后没有赋值,所以不能执行
foo();
function foo() {
console.log(222);
}
// 输出结果:222
三、优先级
函数提升优先级比变量提升优先级高,而且不会被变量声明覆盖,但是会被变量赋值覆盖。
console.log(aaa); //[Function: aaa]
var aaa = 666;
console.log(aaa); //666
function aaa() {}
console.log(aaa); //666