關(guān)于“變量提升”中函數(shù)聲明與函數(shù)表達式的區(qū)別

咳咳

作為一名JSer,說到“變量提升”,我們都很熟悉。曾經(jīng)我也以為是這樣,直到今天去百度面試,在這個問題上狠狠的栽了個跟頭。

關(guān)于JSer都很熟悉的簡單例子

  • 變量提升
console.log(foo)
var foo = function {
    console.log('hello world')
}

這是一個很簡單的例子,大家應(yīng)該很快能反應(yīng)過來,輸出的是undefined。

  • 函數(shù)提升
foo()
function foo () {
    console.log('hello world')
}

這是也一個很簡單的例子,大家應(yīng)該很快能反應(yīng)過來,foo函數(shù)是可以完美執(zhí)行的。

今天令我栽跟頭的題目

// ... 假裝這里有很多不相關(guān)代碼
var a = function () {
    console.log(1)
}
function a() {
    console.log(2)
}
a()

輸出啥?
如果對上面那兩個例子非常熟悉,其實這一題應(yīng)該是能給出答案的。
函數(shù)表達式的例子,我們可以改寫為:

var a  // 聲明變量的操作被提升到最前面
// ... 假裝這里有很多不相關(guān)代碼
a = function {
    console.log(1)
}
a()

如上,a變量的聲明被提前到了作用域的最前面,執(zhí)行到對應(yīng)處,再給a賦值。
舉一反三的話?函數(shù)聲明的例子怎么改呢?
舉一反三的話,就一定錯了。因為舉著一個西瓜,是反不出一個蘋果的。

function foo () {
    console.log('hello world')
}
// ... 假裝這里有很多不相關(guān)代碼
foo()

對于函數(shù)聲明的提升,提升不僅僅是函數(shù)聲明,而是這個函數(shù)的所有。我們總是把變量提升掛在嘴邊,誤以為變量聲明提升(函數(shù)表達式本質(zhì)也是一個變量聲明)和函數(shù)聲明提升是一回事,卻忽視了重要的整體提升概念。
所以綜合以上,可以把這道的面試題改下如下:

var a
function a() {
    console.log(2)
}
// ... 假裝這里有很多不相關(guān)代碼
a = function () {
    console.log(1)
}

a()

改寫成這樣的話,我想應(yīng)該沒有人會不知道輸出什么吧?
很可惜,機會是留給有準備的人,我錯過了一次好機會


原文首發(fā)于我的博客:https://www.vq0599.com/p/34
轉(zhuǎn)載請注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,699評論 19 139
  • 前端07班 王語句JavaScript程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情況下,每一行就是...
    ea203453e188閱讀 994評論 0 4
  • 像變量提升和函數(shù)提升這種偏學院派的問題在面試中出現(xiàn)的概率很高,在實際開發(fā)中也會影響到編程的效率。 前段時間在網(wǎng)上做...
    時和歲稔閱讀 1,194評論 1 7
  • 函數(shù)聲明和函數(shù)表達式有什么區(qū)別? 函數(shù)聲明和函數(shù)表達式是EMACScript規(guī)定的兩種不同的聲明函數(shù)的方法。1.函...
    LeeoZz閱讀 454評論 0 1
  • 1.介紹 赤地雪,容祖兒演唱的歌曲。曾獲2006勁歌金曲優(yōu)秀選第一回 得獎歌曲;2006勁歌金曲優(yōu)秀選第一回 最受...
    Daming_閱讀 633評論 1 1

友情鏈接更多精彩內(nèi)容