变量提升
1. 允许在变量声明之前即被访问。
2. 在代码执行之前,把当前作用域中var声明的变量全部提到当前作用域的最前面。
3. 只提升声明,不提升赋值。
function fn(){console.log(num)var num = 10
}
相当于以下代码:
function fn(){var numconsole.log(num)//undefinedvar num = 10
}
函数提升
只提升函数声明,不提升函数调用。
fn()//正常输出“函数提升”,因为对于函数定义声明的函数可以提升声明
function fn() {console.log('函数提升')
}
函数表达式必须先声明和赋值,否则报错。
a()
var a = function () {console.log('函数提升')
}
//报错:156-函数提升.html:12 Uncaught TypeError: a is not a function
这段代码相当于以下:
var a
console.log(a) //undefined
a() //a is not a function
var a = function () {console.log('函数提升')
}
a() //函数提升