2011年10月18日

javascript:関数で別の関数をクロージャ化してローカル変数を与える

関数をクロージャ化してローカル変数を与えてみる。
※ ローカル変数云々というより、関数を encloser でラップして、スコープチェーンを encloser につなげるって言った方がいいのかな。(同日追記)

function f(){
  alert(v);
}


辿れるスコープ内に v という変数が無ければ、v は当然 undefined。
で、以下の関数。

function encloser(){
  eval('var ' + arguments[1] + ' = "' + arguments[2] + '";');
  return eval('arguments[0] = ' + arguments[0]); // ※ () 追加では ie が ng
}

※ とりあえず string のみ対応。json 化すれば object でも。

この encloser関数にさきほどの f関数を渡してやると……。

f = encloser(f, 'v', 'I am closer!');
f(); // I am closer!


v に値が入れられる。

続きを読む
posted by HiFa at 14:01 | 愛知 ☀ | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。