JS中的閉包為何會產生副作用,即閉包只能取得包含函數中任何變數的最後一個值?
03-03
謝邀。
由於var是函數作用域變數
以是本題中i的作用域即為createFunctions作用域
以是result中全部的成員函數中的i為同一變數
而在任臨時候,這個變數i只能有一個取值
以是result中全部的成員函數調用時i的取值都為10
細緻,以上結論與passbyvalue還是passbyreference無關,也與變數i的數據範例無關,僅與變數的作用域有關。
要是通過函數調用創建一個新的作用域變數
for(vari=0;i10;++i){(function(j){result[j]=function(){returnj;};})(i);}每次循環都市創建一個變數j,result的每個成員函數中的j為差別的取值。
又大概利用塊級作用域變數聲明
for(leti=0;i10;++i){result[i]=function(){returni;};}變數i的作用域為塊級,result的每個成員函數中的i為差別的取值。
推薦閱讀:
※原生 JS 代碼和用 jQuery 實現效果各有什麼優劣勢?
※原生js 有沒有 手機移動端 滑動 的事件?
※JS同名時var 和 function執行順序的問題?
TAG:JavaScript | 編程 | 編程語言 | 原生JavaScript | 副作用 |