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

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

JS 何時(shí)解析function

JS 何時(shí)解析function

我們都知道js有一個(gè)變量提升的東西,那是因?yàn)樵谶M(jìn)入EC(執(zhí)行上下文)的時(shí)候,首先會(huì)去掃當(dāng)前的作用域中,有沒有函數(shù)申明和變量申明,有的話,會(huì)存入AO(活動(dòng)對(duì)象當(dāng)中)。這個(gè)就是造成變量提升的原因。那么有一個(gè)問題,加入一個(gè)有一個(gè)函數(shù)申明在一個(gè)對(duì)象中呢(不知道這里這么叫法是否合適)?如下代碼所示:function aaa() {    return {        bbb: function() {            return 1;         }     }; }console.log(aaa().bbb());如上所示,這是一個(gè)閉包,因?yàn)閎bb有權(quán)訪問aaa的作用域(雖然這里沒有訪問)。當(dāng)然了,這里的關(guān)鍵不在于閉包。那么問題來了,我想問的是,bbb這個(gè)函數(shù)JS解析器是在什么時(shí)候解析到的呢?不可能是在進(jìn)入執(zhí)行上下文的時(shí)候解析吧?那是在解析return這句代碼的時(shí)候,發(fā)現(xiàn)返回的是一個(gè)對(duì)象,然后這個(gè)對(duì)象中有一個(gè)函數(shù)?所以在創(chuàng)建這個(gè)函數(shù)的時(shí)候,再帶上該函數(shù)的作用域鏈。由于這個(gè)作用域鏈中有aaa的作用域,所以在aaa()執(zhí)行完的時(shí)候,其中的AO并沒有被銷毀,也就是形成了閉包。不知道上面這么理解有沒有誤?疑惑在于bbb中的function是在什么時(shí)候被JS引擎解析的?是在一開始創(chuàng)建執(zhí)行上下文?還是在執(zhí)行到return這句代碼的時(shí)候?
查看完整描述

1 回答

?
犯罪嫌疑人X

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

閉包是詞法域,和你的問題無關(guān)。JS的函數(shù)分為function declaration和function expression,你寫的例子里,外面的是declaration,里面的是expression。

對(duì)于declaration,是在它的function scope(包括global)開始執(zhí)行之前解析的,類似變量的hoist,對(duì)于expression,是執(zhí)行到表達(dá)式估值的時(shí)候解析的。


查看完整回答
反對(duì) 回復(fù) 2018-09-23
  • 1 回答
  • 0 關(guān)注
  • 489 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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