標籤: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閉包/匿名函數/範圍