变量提升与函数提升

134 阅读1分钟

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)
变量提升和函数提升都存在
先执行变量提升再执行函数提升