总结: 变量和函数都存在提升现象,但是在同一个作用域下,无论书写位置怎么样,都是是变量先提升,然后再是函数提升,因此如果变量名和函数名相同,那么一定是函数(后提升)覆盖变量(先提升)
举例来说
function A () {
return '我是函数A'
}
var A;
console.log('函数写在前面,声明变量写在后面', A) // A = function A
var B;
function B () {
return '我是函数B'
}
console.log('声明变量写在前面,函数写在后面', B) // B = function B
上面这两种情况,最后打印出来结果都会等于函数。
但是,如果声明变量并且赋值,由于赋值操作是没有进行提升的,所以赋值操作会最后执行,
var C = '12';
function C () {
return '我是函数C'
}
console.log('声明变量并且赋值', C) // C = '12'
上面等价于
var C;
function C () {
return '我是函数C'
}
C = '12';
console.log('声明变量并且赋值', C) // C = '12'