2011年5月1日

ECMAScript の catch 節のスコープのお話

ECMAScript の catch 節はスコープを作るのか、とか。 スコープを作るのであれば catch 節の中の VariableDeclaration で宣言された変数は catch 節内だけで有効なのか、とか。 そういう話
2
(っ=﹏=c) .。o○ @itchyny

catch(e)←このeってvar宣言してなかったらグローバルになる?

2011-04-30 20:55:30
Hiraku @Hiraku

@itchyny catch節はブロックスコープを作るのでブロック内だけ有効になる気がします

2011-04-30 20:58:32
Hiraku @Hiraku

@itchyny はい。jsでもブロックスコープ的に動いてくれますぜ e=1;try{ throw 2 } catch(e) { console.log(e) } console.log(e);// 2, 1

2011-04-30 21:24:18
(っ=﹏=c) .。o○ @itchyny

catchがスコープを作るとかそんな馬鹿な話はないのだけど, 何が起こっているのかしら...

2011-04-30 21:54:57
(っ=﹏=c) .。o○ @itchyny

...such as a FunctionDeclaration, a WithStatement, or a Catch clause of a TryStatement and a new Lexical Environment is created... oh...まじか.

2011-04-30 21:58:45
(っ=﹏=c) .。o○ @itchyny

catchがスコープ作るなら, xの方でReferenceErrorが起こらない説明が http://t.co/uK4qpRw via @ideone

2011-04-30 22:01:13
(っ=﹏=c) .。o○ @itchyny

分からないという結論に至った.

2011-04-30 22:28:16
Nobuoka Yuya @nobuoka

@itchyny 分からないってのは catch がスコープ作るとして、http://t.co/uK4qpRw の x の方でReferenceError が起こらない理由が、ってことですか?

2011-04-30 23:14:25
Nobuoka Yuya @nobuoka

@itchyny あー、言われてみれば謎ですね

2011-04-30 23:22:27
(っ=﹏=c) .。o○ @itchyny

@nobuoka catchがスコープとかないだろうと思ってた私は,...

2011-04-30 23:23:39
Nobuoka Yuya @nobuoka

@itchyny 私も catch がスコープっていうことからちょっとびびりました>< ちょっと調べてみた感じだと、レキシカル環境には LexicalEnvironment と VariableEnvironment の 2 種類があって catch が変えるのは前者のみみたい

2011-05-01 00:00:12
Nobuoka Yuya @nobuoka

@itchyny 関数に入ったときには、関数内の FunctionDeclaration と VariableStatement は全部評価されて VariableEnvironment に結び付けられるので、with や catch の中の var も関数全域で有効みたい

2011-05-01 00:02:30
Nobuoka Yuya @nobuoka

catch 節のスコープについて、というか ECMAScript のレキシカル環境について調べたことをまとめましたっ! http://t.co/vlnTGZi

2011-05-01 01:56:08

コメント

Nobuoka Yuya @nobuoka 2011年5月1日
調べたことをまとめた記事 [ http://t.co/vlnTGZi ] への言及を追加
0