变量提升

225 阅读1分钟

问题来源:当函数和变量同名时,输出的内容是什么?


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.声明过的变量不会重复声明