变量的声明提升
- 使用 var 关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值)
- 如果声明变量时不使用 var 关键字,则变量不会被声明提升
变量提升,变量提升不会覆盖(同名)函数提升,只有变量再次赋值时,才会被覆盖
var a; // 声明了变量但没有赋值
console.log(a);
var a = 10;
函数的声明提升
使用 函数声明 创建的函数,它会在所有的代码执行之前被创建,所以可以在函数声明前调用函数
// 在函数声明前调用函数,函数仍然可以调用
fun(); // 函数声明
function fun(){
console.log("函数声明");
}
使用 函数表达式 创建的函数,不会被声明提升,所以不能在声明前调用
n(); // 会报错:ncaught TypeError: n is not a function
var n = function(){
console.log("函数表达式");
}
优先级
函数提升优先级高于变量提升,且不会被同名变量声明时覆盖,但是会被变量赋值后覆盖。
例子:
var getName = function(){
console.log(2);
}
function getName (){
console.log(1);
}
getName(); // 1
function getName (){
console.log(1);
}
var getName = function(){
console.log(2);
}
getName(); // 2