の違い
function(token) { return str.indexOf(token); }
と
str.indexOf
最初のケースではコンテキストの問題が発生しないということです。
str2 番目のケースでは、これは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です。