の違い
function(token) { return str.indexOf(token); }
と
str.indexOf
最初のケースではコンテキストの問題が発生しないということです。
str
2 番目のケースでは、これはbutではありませんwindow
。文字列のstr.indexOf
名前付きプロパティの値です。indexOf
これは関数ですが、どのオブジェクトから取得したかを値から知る方法はありません。したがって、 を渡す場合str.indexOf
は、関数を渡すだけであり、 ではありませんstr
。
["*", "^", "$"].map(str.indexOf);
と同等です
["*", "^", "$"].map(function(token) { return window.indexOf(token); });
ウィンドウに indexOf 関数があった場合。
わかりやすくするために、使用しないでください。関数はオブジェクトにバインドできます。もしあなたがそうするなら
var f = str.indexOf.bind(str); // makes a copy of indexOf, bound to str
["*", "^", "$"].map(f);
thenthis
が呼び出されるstr
ときf
です。