2010-02-17 [長年日記]
λ. Javascript クイズ
Javascript というか ECMA262-3 に関するクイズ。
var f = function(){ if (true) {function g() { return 1; }; }
else {function g() { return 2;};}
var g = function() { return 3;}
return g();
function g(){ return 4;}}
var result = f();
このコードの実行後に result の値はどうなるべきか?
これを知って、Javascript難しいと思った。
元ネタ: A Structural Operational Semantics for JavaScript の18ページ目

ECMA262-3に従うなら解答は「どうあってもよい」ですね。<br><br>(ECMA262-3に明示された仕様のみに従うなら「構文エラーになるのでresultはいかなる値をも指さない」だが、ECMA262-3は構文の拡張を許しており、しかしながら拡張された構文の意味論は実装依存なため。)
確かにそうですね。<br>そうすると、このスライドで言っているのは、ECMA262-3で定められている原則か何かに従って意味論を拡張したら、ということになるのでしょうか。