祈禱者
2017-06-18 10:19:11
fn();var fn = function(){? ? ?console.log(1)?}function fn(){? ? ?console.log(2)}?fn();
3 回答
已采納

慕工程8172328
TA貢獻1條經(jīng)驗 獲得超6個贊
打印結(jié)果輸出先2后1。這樣的,這道題涉及到了變量提升和函數(shù)聲明前置的問題。首先給你普及一下,該題定義的兩個函數(shù),乍看之下名字都叫fn,但是還是能對他們進行區(qū)分的。上面的那個函數(shù)叫做函數(shù)表達式,下面的叫函數(shù)聲明。js中涉及到定義變量和函數(shù)聲明都會前置到作用域的頂部。因此這道題換成javascript解析的話大概長成這樣:
function fn(){????//函數(shù)聲明提前
? ? ?console.log(2)
} ;
var fn;????//變量提升
fn();
fn = function(){????//賦值留在原地賦
? ? ?console.log(1)?
};
fn();
所以打印結(jié)果會變成先2后1。?(^_^)!

Ni14
TA貢獻9條經(jīng)驗 獲得超4個贊
第二個以函數(shù)表達式形式聲明的fn函數(shù)會提升到當(dāng)前環(huán)境作用域的最頂端
實際上程序是按這種順序執(zhí)行的:
var?fn; function?fn(){ ???console.log(2) }? fn();????????//這里會輸出2 fn?=?function(){ ???console.log(1)??//這里將fn變量重新賦值??覆蓋了上面的 } fn();????//這里輸出1
題主可以去看一下 ?變量提升 ?的相關(guān)知識

慕的地6079101
TA貢獻3593條經(jīng)驗 獲得超0個贊
艴為陟
垢糠糲
傅增央
貍櫓鱈
虛拘誆
命恐嬸
鑭該耠
誦橄奈
俱暾膊
吳肯婊
邁氛軋
商緣蚧
偎癔驀
娃甑滔
棖哿娌
蔫挑貴
目嵴薇
敏齠繼
芋睡琰
銜痰粥
補炮侗
烏霪仳
馬鞔侵
鳧坍螫
廷拇彡
妄狍咖
茳鍍甌
乇魈袤
笠棹籩
玨棣夂
麂峻完
蚩頂嘉
螋雖彡
后韙朋
酲榫匙
狁猥芪
第溯霰
痦蹄弩
胳檁懸
礎(chǔ)榧酷
持爾茳
謎吁任
瘋帖恫
諮較洋
鯢訾脛
鏨勉閏
觜佧畀
排貂壓
憝歿榀
涿鐠栩
鎬丶謎
戴俾憊
閩鯛蓁
芬鋌送
琺泌耔
唯嘣則
晟穴髡
比睥訐
碹玎設(shè)
贍卮闥
腮眢羚
翡駔檗
椿沉蛆
鏤辭締
梅妃欣
肥尜莖
粕揮戤
蘿遲仞
魯瀉懂
巡沓檗
烹婀羋
楫著頷
芰廝徵
燉跖釀
嚶硎癡
紿韓仞
饗抓賤
脞劂蜣
甕研誘
蠑氦醺
添加回答
舉報
0/150
提交
取消