问题来源:当函数和变量同名时,输出的内容是什么?
var a = 2
function a() {}
console.log(a) // 2
第一次看到这段代码的时候,张口就来输出函数a,但实际上输出的是2,这是为什么呢?
解析
首先,函数和var的变量在解析的过程中都存在变量提升,即将声明提升到作用域的顶部,而且函数提升的优先级高于变量,也就是说函数提升在变量上面,拆分如下:
function a() {}
var a
a = 2
console.log(a) // 2
其中代码中的var a = 2实际是将这块拆分成了两个部分,一个是变量的声明一个是变量的赋值,所以最后才输入2
**总结
1.函数声明会置顶 2.变量声明也会置顶 3.函数声明比变量声明更置顶 4.变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置 5.声明过的变量不会重复声明