1)变量声明提升
- 通过 var 定义(声明)的变量,在定义语句之前就可以访问到
- 值:undefined
相当于变量声明提前执行了,但没有赋值;注意:变量赋值没有提前执行,只是变量的声明提前执行了
导致的现象:
console.log(a); //undefined
var a = 'ok'
函数内部代码实际执行:
var a
console.log(a); //undefined
a = 'ok'
2)函数声明提升(函数必须是声明的方式,而不能是表达式的形式)
- 通过function声明的函数,在之前就可以直接调用
- 值:函数定义(对象)
函数提升只会提升函数声明不会提升函数表达式
console.log(fn1)//ƒ fn1(){ console.log('fn1') }
fn1() //fn1
console.log(fn2)//undefined
fn2() //Uncaught TypeError: fn2 is not a function
function fn1(){
console.log('fn1')
}
var fn2 = function (){
console.log('fn2')
}
函数提升示例
var a = 1
function fn3(){
a = 10
console.log(a);
return
function a (){}
}
fn3() // 10
console.log(a) //1
// 内部实际运行
var a = 1
function fn3(){
function a (){}
a = 10
console.log(a);
return
}
fn3()
console.log(a)