ECMAScript 5thでFunctionオブジェクトにbindというメソッドが追加されたそうだ。これは引数やスコープを束縛できるものらしい。引数を束縛して部分適用したり、クロージャに取り込まれた値を変えることが可能になる。
最新版のChromeでは実装されている。Firefoxは4で実装されるようだ。
引数をbind
function sum() { var sum = 0; Array.prototype.forEach.call(arguments, function(e,i){ sum += e }); return sum; } sumPlus1 = sum.bind(null, 1); sumPlus1(3,4) => 8
スコープをbind
var x = 5; function m5(y) { return this.x * y } m5(10) => 50
m5はグローバルスコープで実行されるので、thisはwindowとなる。this.xは先に定義したvar x = 5が適用される。
bindを使うと、スコープを変更した関数を作成できる。
var m6 = m5.bind({x: 6}); m6(10) => 60
結果だけ見ると、これと同じっぽい
m5.call({x:6}, 10);
どういう場面で使うんだろう?
ついき
jQuery の作者 John Resig が書いた Learning Advanced JavaScript の Goal として設定されている bind メソッドがまさしくコレですね…。