for (var i = 0, len = fns.length; i < len; i++) {
fns[i].call();
};
ここに作業フィドルがあります。
関数を呼び出すには、上記のようにFunction.prototype.call
andを使用します。とをFunction.prototype.apply
使用すると、実行スコープと関数呼び出しを渡すことができます。それが必要ない場合は、次のようにするだけです。call
apply
arguments
for (var i = 0, len = fns.length; i < len; i++) {
fns[i]();
};
コードについて:
Array.prototype.map
callback
とを取る関数ですscope as parameters
。最初の 2 つの例では、無名関数を として使用しており、callback
によって自動的に渡されたパラメーターを呼び出しますArray.prototype.map
。展開すると、コードは次のようになります。
function single(element) {
element();
};
fns.map(single);
したがって、上記は完全に正しいです。を使用して同じ原則に従って、マップによってパラメーターとして渡されたFunction.call.call
関数を呼び出しています。f
しかし、あなたの3番目の例では、直接call
経由を強制していますがFunction.call.prototype.call
、この場合、f
パラメータとして渡されなくなりました。つまり、Function.call.call
を呼び出そうとundefined
するため、TypeError
. Function.call.call
の中map()
に入れると、 aを引数として渡しません。callback
call
すぐになります。は, orFunction.call.call
とまったく同じもので、3 番目の例で行ったように使用するとすぐに評価されます。Function.call.call()
Function.call.call(undefined)