变量提升和函数提升(优先级)

321 阅读1分钟

总结: 变量和函数都存在提升现象,但是在同一个作用域下,无论书写位置怎么样,都是是变量先提升,然后再是函数提升,因此如果变量名和函数名相同,那么一定是函数(后提升)覆盖变量(先提升)

举例来说

 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'