區(qū)別JavaScript函數(shù)聲明與變量聲明
今天,又由一到題目引發(fā)了一場我跟JS基礎(chǔ)的較量:首先是
var getName = function(){alert(1)}; function getName(){alert(2)}; getName();// 1
or
function getName(){alert(2)}; var getName = function(){alert(1)}; getName();// 1
為什么我調(diào)換聲明順序,結(jié)果還是輸出以 var 形式聲明的函數(shù)的值?
有人回答我說 "啊,變量提升呀...",我最開始的理解,就算變量提升,第一種情況提升之后,應(yīng)該是這樣?。?/p>
var getName; getName = function(){alert(1)}; function getName(){alert(2)};
最后應(yīng)該輸出 2 才對啊(很理直氣壯)。
殊不知不只有var聲明才會提前,以function fn(){}這種形式聲明的函數(shù),會被提升到作用域的最最頂部,然后再是變量的提升。
具體請看下面例子:
fn();//Uncaught TypeError: fn is not a function var fn = function(){console.log(1)};
but
fn();//2 var fn = function(){console.log(1)}; function fn(){console.log(2)}
足以說明函數(shù)提升的更兇一些。
相關(guān)文章
js貪吃蛇網(wǎng)頁版游戲特效代碼分享(挑戰(zhàn)十關(guān))
這篇文章主要為大家詳細介紹了js貪吃蛇網(wǎng)頁版游戲特效,游戲總共有十關(guān),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-08-08JavaScript數(shù)據(jù)結(jié)構(gòu)之棧實例用法
在本篇文章里小編給大家分享了關(guān)于JavaScript數(shù)據(jù)結(jié)構(gòu)之棧實例用法內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2019-01-01JavaScript實現(xiàn)判斷圖片是否加載完成的3種方法整理
這篇文章主要介紹了JavaScript實現(xiàn)判斷圖片是否加載完成的3種方法整理,本文講解了onload方法、javascipt原生方法、jquery方法三種方法,需要的朋友可以參考下2015-03-03JavaScript面試出現(xiàn)頻繁的一些易錯點整理
通過幾個常見面試開始,討論針對一個題目的分析思路,就有了下面這篇文章,本文主要給大家整理總結(jié)介紹了關(guān)于JavaScript面試中會頻繁出現(xiàn)的一些易錯點,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧。2018-03-03詳解JavaScript如何實現(xiàn)一個簡易的Promise對象
Promise對象的作用將異步操作以同步操作的流程表達出來,避免層層嵌套的回調(diào)函數(shù),而且Promise提供了統(tǒng)一的接口,使得控制異步操作更加容易。本文介紹了如何實現(xiàn)一個簡單的Promise對象,需要的可以參考一下2022-11-11