Open
Description
Temporal windowというのは、見えているスコープの中で直近にdefineされた変数を指す方式のこと。
ref. https://zenn.dev/qnighy/articles/f3d2d7adc75948
現状のインタプリタはTemporal windowであり、これは実行時に識別子がどの変数を指すかが変わってしまう。
具体的には以下のようなコードで、関数を呼び出すタイミングによって参照する変数が変わる。
let hoge = 0
eval {
@f() { hoge }
<: f() // 0
let hoge = 1
<: f() // 1
}
関数が定義された時点で参照する変数を決定するTemporal Dead ZoneかLexical Windowにするべきなのでは
Temporal Dead Zone
- 一回目の呼び出しの時点でeval内の変数を参照しようとして参照エラーを出す。
- JavaScriptと同じ。
Lexical Window
- 二回目の呼び出しでも外側の変数を参照する。
- 関数が定義された時点で宣言されていない変数には触れない。