關於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會給人帶來誤解