js閉包詳解原理
阿新 • • 發佈:2018-12-11
雖然身為一個java程式設計師,但是覺得了解前端知識是很有必要的,js中有一個比較難的知識點--閉包,不知道大家對閉包是怎樣理解的。接下來通過一個小例子來帶大家瞭解下js中的閉包。
何為閉包:把內部函式儲存到外部一定會形成閉包
再瞭解閉包之前,得先知道函式的預編譯、作用域以及作用域鏈(大家自行了解)。
我們的demo:大家可以自己執行一下,答案是10個10沒錯吧。
function test(){ var arr = []; for(var i = 0; i < 10; i++){ arr[i] = function (){ console.log(i); } } return arr; } var arr = test(); for(var i = 0; i < 10; i++){ arr[i](); }
arr陣列中儲存的每個函式訪問的i變數是存在test函式的執行期上下文中的,這個一定要了解,因此指向的是同一個變數,arr陣列中訪問的時候也就是訪問的同一變數,而test函式中的i變數迴圈10次之後每次++變為了10,因此輸出10個10
(下面這個的結果是0-9)曾經我一度以為這種為什麼結果跟上面的不一樣 ,因為這種沒有形成閉包,大家訪問的不是同一變數
var arr = new Array(); for(i = 0; i < 10; i++){ arr[i] = function (){ console.log(i); } } for(var i = 0; i < 10; i++){ arr[i](); }