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で定められている原則か何かに従って意味論を拡張したら、ということになるのでしょうか。