less RSS

ykskはかしゆかのアナグラムではありません。

Archive

Feb
25th
Thu
permalink

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 // 常に後者を返す