简单了解JS中的变量提升问题:
变量声明的提升
* 使用var关键字声明的变量,会在所有代码执行之前被声明(但不会赋值)
console.log(a);//undefined
var a = 123;
上述代码相当于:
var a;
console.log(a)
a = 123;
* 如果声明时没有使用var关键字,则变量声明不会提前
console.log(a)// 报错 a is not defined
a = 123;
函数的声明提前:
* 使用函数声明形式创建的函数 function 函数名(){}
- 会在所有代码执行之前就被创建,所有我们可以在函数声明之前调用函数
* 使用表达式创建的函数 不会被声明提前,所以不能在声明钱调用
fun()// fun()
console.log(fun2)// undefined
fun2()// 报错 fun2 is not a function
//函数声明形式创建函数
function fun(){
console.log('fun()')
}
//表达式创建函数
var fun2 = function(){
console.log('fun2()')
}