今天,又由一到題目引發(fā)了一場(chǎng)我跟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ù)的值?
有人回答我說(shuō) "啊,變量提升呀...",我最開(kāi)始的理解,就算變量提升,第一種情況提升之后,應(yīng)該是這樣啊:
var getName; getName = function(){alert(1)}; function getName(){alert(2)};
最后應(yīng)該輸出 2 才對(duì)啊(很理直氣壯)。
殊不知不只有var聲明才會(huì)提前,以function fn(){}這種形式聲明的函數(shù),會(huì)被提升到作用域的最最頂部,然后再是變量的提升。
具體請(qǐng)看下面例子:
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)}
足以說(shuō)明函數(shù)提升的更兇一些。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com