Javascript (ECMAScript) の変なところ

Javascript (ECMAScript) には変なところがたくさんある。
ここでは、クロージャーやプロトタイプチェーンといった大きいところではなくてもっと細かい変なところをまとめたい。
以前、自分がパーザーや制御文を実装していたためその辺りが多いかも。
h2. ECMA 262 5th
h3. Completion value
Completion value というのは、
bc. //
100; // line. 1
200; // line. 2
とあった時に、line. 1を実行するとCompletion valueが100になり、line. 2を実行すると200になる、というものである。
まあ、 Perl の @return@ を省略した場合の戻り値ようなものだ。
基本的に参照する方法もないし、言語実装の内部的なものなのでどうでもいいようなものだが、実は eval が返す値のことだったりする。
@eval(“return 10;”);@ がエラーになるのは、evalは文字列をjsファイルのトップレベルとして評価するためだが、 @eval(“10;”);@ で @10@ が帰るのはプログラムを実行した最後のCompletion valueを返しているのだ。
厄介なのが、DOMのイベントのIE時代にトラディショナルなコードで、
@