第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問這道js題是怎么一回事?

請問這道js題是怎么一回事?

祈禱者 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。?(^_^)!



查看完整回答
6 反對 回復(fù) 2017-06-18
  • ExiaGo
    ExiaGo
    你好,變量提升和函數(shù)聲明提前,究竟是哪個在先?個人認為是函數(shù)聲明在前。
  • 慕工程8172328
    慕工程8172328
    嗯是的,查了一下在“你不知道的JavaScript(上卷)” 一書的第40頁中寫到:函數(shù)會首先被提升,然后才是變量。而且fn覆蓋是在賦值的時候產(chǎn)生的,也就是說var fn;這里不會影響提前的函數(shù)。所以,在暫時不影響本題結(jié)果的情況下容我修改一下 。哈哈
  • ExiaGo
    ExiaGo
    嗯,謝啦。
?
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)知識

查看完整回答
2 反對 回復(fù) 2017-06-18
?
后知后覺88

TA貢獻39條經(jīng)驗 獲得超10個贊

感覺是聲明前置的順序的問題 .? js會對函數(shù)的聲明前置.

查看完整回答
反對 回復(fù) 2017-06-18
  • 3 回答
  • 0 關(guān)注
  • 2053 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號