- 62 名前:Name_Not_Found mailto:sage [2018/06/09(土) 19:40:55.00 ID:???.net]
- >>59
いや、JS2.0とかやってた名残で当初は早いようにも見えたけど 実際は独自実装の非互換性問題とかもあったし、ここ2年くらいはChromeの方が実装早いよ >>61 難しく考えずとも、変数とはスコープオブジェクトのプロパティのようなものだ そのスコープにぶら下がる変数はスコープに入る時に全て作られる そういうことをしなければ。スコープ外でlet aと定義していてスコープ内で同じくlet aと定義している場合、 スコープ内のlet aに達するまでにaを参照した場合スコープ外のaを参照する挙動になってしまう あるいはそういう挙動でも良かったのかもしれないが、JSではその挙動を是としていないため、 スコープ内で作られる変数はそのスコープに入った段階で作られることになる 仕様での用語としては「CreateBinding」で、スコープ(Environment Record)に対して値を紐付けるための名前を作る作業がある そしてその変数宣言文に実行が達したら「InitializeBinding」で、値が初期化される それまでに変数を利用しようとした場合は例外となる 要するに変数の状態としては「created」かどうかと、「initialized」かどうかの2つを考えればいいだけ 関数宣言に関してはブロックが評価される時に、通常の宣言であればcreateされるだけのところを追加でinitializeされるというだけ
|
|