变量提升与函数提升
变量提升经典面试题
/*
面试题 : 输出 undefined
*/
var a = 3
function fn () {
console.log(a)
var a = 4
}
fn()
代码实际执行时:
var a = 3
function fn () {
var a
console.log(a)
a = 4
}
fn()
执行fn()时,先找到函数内的a 然后进行打印,此时a声明了但是没有赋值,所以输出undefined。
变量提升与函数提升定义
- 变量声明提升
通过var定义(声明)的变量, 在定义语句之前就可以访问到
值: undefined- 函数声明提升
通过function声明的函数, 在之前就可以直接调用
值: 函数定义(对象)
console.log(b) //undefined 变量提升
fn2() //可调用 函数提升
// fn3() //不能 fn3是变量提升 不能直接执行函数
var b = 3
function fn2() {
console.log('fn2()')
}
var fn3 = function () {
console.log('fn3()')
}
要使用函数提升,函数只能使用声明的方式进行定义,不能用赋值的方式。