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

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

關于js閉包

關于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>這是一個js的閉包問題,但是我看不懂最后兩部為什么輸出f1函數(shù)的時候為什么要聲明變量result,而且最后result后面還有括號,他們之間是什么邏輯關系呢?
查看完整描述

1 回答

已采納
?
千秋此意

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


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

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


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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