ES.next のデフォルトパラメータが Firefox Nightly で実装された

function hoge (arg = "hogehoge") {
  return arg;
}

hoge("foo"); // "foo";
hoge();      // "hogehoge"

えーと、もう分かると思うけど、引数が与えられなかった時の値を定められるようになったよ。

変なコードを試してみる

function foo () {
  return "outer foo";
}

var o = {
  func: function (arg = foo()) {
    return arg;
  }
};

o.func(); // => "outer foo"

これは期待通り。というか普通ですね。

次、

function foo () {
  return "outer foo";
}

var o = {
  func: function (arg = foo()) {
    function foo () {
      return "inner foo";
    }
    return arg;
  }
};

o.func(); // => TypeError: foo is not a function

例外が発生しちゃいました。どちらが返ってくるかを見ようとしたのに...。

バグ報告かな...

追記(2012-05-28)

を見る限り、変数の場合は undefined になるのが仕様っぽい。
関数の場合、どうなるかのテストコードはないけど、変数と同じなら、undefined()をしようとしているわけで、TypeErrorになるのもうなずける。