JS中的閉包為何會產生副作用,即閉包只能取得包含函數中任何變數的最後一個值?

謝邀。

由於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 | 副作用 |