关于JavaScript中的变量提高和函数提高,看一道面试题:javascript
console.log(a) function a(){} console.log(a) var a = 0; console.log(a)
以上代码中会打印出什么呢?java
一开始,我觉得是面试
undefined function a(){} 0
后来我觉得是函数
function a(){} undefined 0
可是其实是:code
function a(){} function a(){} 0
为何呢?blog
其实就两个姿式点图片
1.函数和变量相比,会被优先提高。这意味着函数会被提高到更靠前的位置。如下图片截取致MDN官网ip
2.若是你从新声明一个 JavaScript 变量,它将不会丢失其值。io
上面的代码能够看做是这样的:console
function a(){} var a; console.log(a) console.log(a) a = 0; console.log(a)
为何第一个a打印的是function a(){},由于函数比变量优先提高;
为何第二个a打印的仍是function a(){},由于从新声明一个变量,它不会丢失其值;
至于第三个a打印的是0就很简单了,a被从新赋值为0,打印出来的天然是0了。
因此说如下代码是不同的
function b() {} var b = undefined; console.log(b) // 没有赋值 function b() {} var b; console.log(b)
因此单纯的说使用var申明一个变量,其默认值是undefined会给人带来误解