for (var i = 0, len = fns.length; i < len; i++) {
fns[i].call();
};
ここに作業フィドルがあります。
関数を呼び出すには、上記のようにFunction.prototype.callandを使用します。とをFunction.prototype.apply使用すると、実行スコープと関数呼び出しを渡すことができます。それが必要ない場合は、次のようにするだけです。callapplyarguments
for (var i = 0, len = fns.length; i < len; i++) {
fns[i]();
};
コードについて:
Array.prototype.mapcallbackとを取る関数です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)