Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*問題出在作用域(scope),原先的程式碼中i變數的作用域是在整個createArrayOfFunctions()函式中,
- 陣列中裡每個函式裡面的i在return的時候都會等於y的值,這樣一來就形成了bug,
- 我的解決方案是利用let宣告迴圈的i變數或是將函式改用閉包的方式來將變數的作用域改成我們所想要的範圍內即可*/
- function createArrayOfFunctions(y) { //let的改法
- var arr = [];
- for(let i = 0; i<y; i++) {
- arr[i] = function(x) { return x + i; }
- }
- return arr;
- }
- function createArrayOfFunctions_2(y) { //閉包
- var arr = [];
- var newFunc = function(ii) { return function(x){return x + ii;};};
- for(var i = 0; i<y; i++) {
- arr[i] = newFunc(i);
- }
- return arr;
- }
Add Comment
Please, Sign In to add comment