JavaScript中的變量提高和函數提高

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

相關文章
相關標籤/搜索