亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

js 怎樣理解這個問題? 閉包?模塊? 從作用域上怎樣理解?

js 怎樣理解這個問題? 閉包?模塊? 從作用域上怎樣理解?

慕桂英546537 2018-12-12 18:18:09
這個問題通過幾位朋友的回答,我已經理解了很多,而更深的知識,我想也不是幾句話就能說清的(比如 IIEF 、單列之類的),這需要我自己去尋找相關的知識點,加深理解。最后,我會采納“依云”的答案,畢竟他是第一個回答了這個問題的朋友,而且言之有物,所有對于另外幾位朋友,我只能說聲抱歉了。答案只能采納一個,但心里的感謝是可以分為幾份的。在此,真摯的感謝這幾位朋友,你們的回答,對我很有幫助。這是問題:前兩個輸出和后兩個為什么不一樣?如果可以從 對象、自執行、閉包、垃圾回收(也許是與這有關)等方面或者你覺得有關的方面加以解釋,本人萬分感激。var myTest = (function () {    var stringA = "A";    var stringB = "B";    function setAB() {        stringA = "now is a";        stringB = "now is b";    }    function getAB() {        return {            "stringA": stringA,            "stringB": stringB        };    }    return {        "setAB": setAB,        "getAB": getAB,        "stringA": stringA,        "stringB": stringB    };})();myTest.setAB();var stringAB = myTest.getAB();console.log(myTest.stringA);//Aconsole.log(myTest.stringB);//Bconsole.log(stringAB.stringA);//now is aconsole.log(stringAB.stringB);//now is b
查看完整描述

1 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

麻煩下次把問題寫在正文里不要藏在代碼的注釋里……另外發代碼請先測試,修正任何筆誤之后再粘貼過來……

myTest 的值被立即執行函數設置為了:

{

        "setAB": setAB,

        "getAB": getAB,

        "stringA": stringA,

        "stringB": stringB

}

這里的變量是立即求值的,所以這時候 myTest.stringA 就是 A 了。

setAB 隨后修改了閉包內變量的值,然后 getAB 把它們返回。但它們已經和 myTest.stringA 沒有關系了。要不你把最后的 return 改成這樣更好看:

    return {

        "setAB": setAB,

        "getAB": getAB,

        "A": stringA,

        "B": stringB

    };


查看完整回答
反對 回復 2019-01-04
  • 1 回答
  • 0 關注
  • 476 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號