变量声明提升
使用var关键字声明的变量,会在所有的代码执行之前被声明。如果声明变量时未使用var关键字,变量不会被提前声明
console.log(a) // 输出undefined
var a = 1
// 等同于
var a
console.log(a) // 输出undefined
a = 1
函数的声明提升
使用函数声明形式创建的函数,会在所有代码运行之前就被创建
foo() // 输出 我是foo函数
function foo() {
console.log('我是foo函数')
}
// 等同于
function foo() {
console.log('我是foo函数')
}
foo() // 输出 我是foo函数
使用函数表达式创建的函数,此时只是变量被提前声明,此时变量的值是undefined
bar() // 这里会报错
var bar = function() {
console.log('我是bar函数')
}
// 等同于
var bar
bar() // 这个时候的bar是undefined,undefined怎么能做为函数执行呢?
bar = function() {
console.log('我是bar函数')
}