最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

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

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

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

再睡一會就碼 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個贊

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

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

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

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

  4. 變量聲明?

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

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

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

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

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

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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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