20170713_js閉包/匿名函數/範圍

來源:互聯網
上載者:User

標籤:span   script   全域   var   https   function   函數   沒有   高階函數   

js:閉包var getNum;function getCounter() { var n = 1; var inner = function () {return n++; } console.log(n); return inner;}//第一步getNum = getCounter();
//第二步console.log(getNum());//1
//第三步console.log(getNum());//2
//也許是這樣?可能的情況1://第一步 getNum指向了getCounter函數的傳回值,即inner函數,此時inner內的n調用的是上級函數的n,但是沒有執行,所以此時n是1,而且由於他調用的是上級函數的變數,此時inner的n突破了範圍,n=1寫入到了記憶體中,可以以後進行調用//第二步 執行getNum函數,也就是執行了inner函數,inner函數此時返回n++,也就是 1++ 返回了1,執行後n現在等於2了//第三部 同上返回2,執行後n等於3
//或者是這樣?可能的情況2://第一步 getNum指向了getCounter函數的傳回值,即inner函數//第二步 執行了getNum函數,也就是執行了inner函數,由於他在一個高階函數getCounter內部,他可以使用高階函數內的變數n,由於inner函數被return,此時n實現了越獄,n=1寫入到了記憶體中,可以以後進行調用,此時輸出1,n++後n=2//第三步 由於n實現了越獄,輸出2,n++後n=3
//n不是全域變數,只能在inner內使用 參考文檔:①圖解JS閉包 https://zhuanlan.zhihu.com/p/27857268②JavaScript之範圍與閉包詳解http://www.cnblogs.com/syfwhu/p/4839562.html

20170713_js閉包/匿名函數/範圍

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.