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

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

關(guān)于js閉包

關(guān)于js閉包

咩咩咩3124927 2016-09-24 17:24:01
<!DOCTYPE?html> <html> <head> ??<meta?charset="utf-8"> ??<title>JS?Bin</title> </head> <body> <script>?? ??function?f1(){ ????var?n=999; ????function?f2(){ ??????alert(n); ????} ????return?f2; ??} ??var?result=f1(); ??result(); </script> </body> </html>這是一個(gè)js的閉包問題,但是我看不懂最后兩部為什么輸出f1函數(shù)的時(shí)候?yàn)槭裁匆暶髯兞縭esult,而且最后result后面還有括號(hào),他們之間是什么邏輯關(guān)系呢?
查看完整描述

1 回答

已采納
?
千秋此意

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


f1()通過return暴露出一個(gè)公有的函數(shù)f2出去,在f2函數(shù)里引用了變量n,因?yàn)閒2實(shí)際上是定義在f1內(nèi)部的所以當(dāng)f2的作用域里找不到變量n的時(shí)候會(huì)沿著作用域鏈往上找到f1作用域里的變量n,只要f2里對(duì)n的引用還在即使f1已經(jīng)運(yùn)行完畢但是里面的變量n也不會(huì)被銷毀(垃圾回收);

//?至于為什么result要調(diào)用,代碼這樣寫就比較直觀:
function?f1()?{
??var?n=999;
??return?function(){
????console.log(n);
??}
}
var?result?=?f1();?//?這一步f1()返回的實(shí)際上就是本來的f2那個(gè)函數(shù),所以要在下面再調(diào)用f2才能執(zhí)行里面的代碼。
result();
//?直接寫?f1()()也可以的


查看完整回答
反對(duì) 回復(fù) 2016-09-24
  • 咩咩咩3124927
    咩咩咩3124927
    function f1(){     var n=999;     function f2(){       alert(n);     }     return f2();   } f1(); 你好,我再問下,我這樣直接在后面調(diào)用f1();也可以輸出結(jié)果,請(qǐng)問跟申明變量reuslt然后再調(diào)用輸出有什么區(qū)別嗎?
  • 千秋此意
    千秋此意
    有區(qū)別的,如果按你這樣寫,最后f2里面的代碼“alert(n)”還是執(zhí)行了,不過他執(zhí)行的時(shí)間是在你調(diào)用f1()的時(shí)候就執(zhí)行了,你f1里面的return返回的值其實(shí)是undefined,而原來那個(gè)寫法f1調(diào)用返回的值是f2這個(gè)函數(shù)體,所以兩種寫法雖然都可以讓f2里面的代碼執(zhí)行但是執(zhí)行的過程是不一樣的,f1的返回值也不同
  • 咩咩咩3124927
    咩咩咩3124927
    多謝了
  • 1 回答
  • 1 關(guān)注
  • 1228 瀏覽
慕課專欄
更多

添加回答

舉報(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)