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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

這題輸出為什么是ƒ a(){} 和 2啊 ?

這題輸出為什么是ƒ a(){} 和 2啊 ?

再睡一會(huì)就碼 2019-09-27 21:27:02
? function fn(a){? ? ? ?console.log(a);? ? ? ?var a=2;? ? ? ?function a(){}? ? ? ?console.log(a);? ?}? ?fn(1)
查看完整描述

2 回答

?
pardon110

TA貢獻(xiàn)1038條經(jīng)驗(yàn) 獲得超227個(gè)贊

涉及到j(luò)s的變量提升和詞法分析,變量解析的優(yōu)先順序如下

  1. js語言定義變量? 像this,arguments這類變量名

  2. 形參變量 形參變量會(huì)添加到函數(shù)的作用域中

  3. 函數(shù)聲明 表現(xiàn)出現(xiàn)的就是函數(shù)體

  4. 變量聲明?

詞法分析順序:參數(shù)-->變量聲明 --> 函數(shù)說明

js函數(shù)在運(yùn)行期會(huì)生成一個(gè)活動(dòng)對象,先進(jìn)行變量提升,再做詞法分析,換句話來說就是變量覆蓋

當(dāng)代碼運(yùn)行到第1個(gè)console.log時(shí)a已發(fā)生過賦值操作,因此詞法分析此時(shí)的參數(shù) a是活動(dòng)對象AO已存在a屬性且值為 1,與此同時(shí)受函數(shù)fn內(nèi)的 a也存在變量提升,它的默認(rèn)值 是undefined,對提升的普通變量在Ao上已存在,則不作任何操作, 但碰到后面的函數(shù)變量a也提升了,它的默認(rèn)值為該函數(shù)體,根據(jù)詞法分析順序,此時(shí)a輸出時(shí)變量會(huì)被同名的Ao屬性a覆蓋結(jié)果輸出函數(shù)體,到第2個(gè)console時(shí)進(jìn)入時(shí),因變量提升已分析完,直接進(jìn)入了詞法分析(進(jìn)入作域首先做的就是變量提升),之上明確聲明 a值 且賦值就是2,它在函數(shù)a變量提升之后,導(dǎo)致覆蓋直接輸出變量2.

需要注意的是在詞法分析階段,針對AO對象上的已存在的屬性變量,其在詞法分析變量階段不作任何操作。但若存在函數(shù)變量提升,則會(huì)被賦蓋。

另外一個(gè)要注意的是,js雖然大體上是從上到下的執(zhí)行,但在引擎解析這部分會(huì)有其它的小動(dòng)作,畢竟最終執(zhí)行者還是引擎,引擎想更改執(zhí)行順序太容易了。

查看完整回答
反對 回復(fù) 2019-09-29
  • 2 回答
  • 0 關(guān)注
  • 791 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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