関数が与えられたとします (それはオブジェクトの一部です。心配しないでください)。
makeClosures : function(arr, fn) {},
ここで、パラメータは、最初に配列、たとえば[1, 2, 3, 4]
、2 番目に、指定された数値を 2 乗する関数 (doSomeStuff と呼びます) です。
var doSomeStuff = function (x) { return x * x; }
makeClosures
は、 と同じサイズの配列を返すことになっていarr
ます。各要素には、基本的に を呼び出す関数への参照が含まれていますdoSomeStuff
。
だからここに私の実装があります:
makeClosures : function(arr, fn) {
var funcs = [];
for (var i = 0; i < arr.length; i++) {
var f = function() {
return fn(arr[i]);
};
funcs.push(f);
}
return funcs;
},
質問は次のとおりです。
プログラムを実行すると、 の戻り値f
はNaN
. 実際の数値 ( return fn[1]
, return fn(arr[0])
) を試してみたところ、うまくいきました。これは、問題が発生していることを意味しますarr[i]
(未定義?)。内部関数f
が loop index を認識していないと思われますi
。なんで?