2007年 12月 23日

Opera での with の挙動

var foo = { 
    bar : "bar"
};
(function () {
    with (foo) {
        alert("normal+"+bar);
        function baz () {
            alert("function def."+bar); // opera だと reference error
        }
        baz();

        (function () {
            alert("function exp."+bar); // <del>opera だと reference error</del>
        })();
    }
})();

Fx と Safari では大丈夫。これは Opera のバグっぽい? (Opera 9.24, 9.50 Beta 4591)

同じくスコープチェインをいじる try/catch は大丈夫だ。with だけか

(function () {
    try {
        throw "hello";
    } catch (foo) {
        alert(foo);
        (function () {
            alert(foo);
        })();
    }
})();

(Opera, Safari, Fx でちゃんとできる)

関数式のほうは勘違いでした。関数宣言のほうだけだめです……