Feb
25th
Thu
25th
arguments
JavaScript、仮引数で宣言した変数へ代入したあとの arguments の挙動 - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtechより。
さて問題です。以下のコードで alert されるのは何でしょう!!
(function (x) { x = 2; alert(arguments[0]); })(1);
答えは2。この挙動については
(function(x) {
arguments[0] = 2;
alert(x); // 2
})(1);
のようなことが出来るので不思議に思わなかった(いかにも裏にオブジェクトがある風)のだけど、むしろ
(function (x) {
x = 2;
alert(arguments[0]);
})(); // 仮引数なし
の場合の結果がundefinedなのにびびった。仮引数が渡されなかった場合はバインドされない。でもundefinedを明示的に渡した場合はされる。
(function (x) {
x = 2;
alert(arguments[0]); // 2
})(undefined);
昔そのことについて調べたんだった・・。arguments面白い。手元にサイ本がないのが悔やまれる。
ついでにarguments.calleeはブラウザ差異があるよ。
JSのクイズ。おもしろかった。6問不正解(#3、#4、#5、#6、#7、#9)。カンマ演算子を理解していないことが分かった。発見があるのは楽しい。
(foo, bar) === bar // 常に後者を返す