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になるのもうなずける。