質問:
javascriptの変数のスコープってどうなってる?関数の中と外で同じスコープを持ってる?それとも違う?
また、グローバルに定義されている場合、変数はどこに格納されるの?
By lYriCAlsSH | 質問日時: 2009年2月1日 8:27
回答1:
君が勉強するためにベストなのは例をたくさん与えることだと思う。
Javascriptのプログラマーは、どれくらいスコープを理解しているかによって実質的にランク付けされてるからね。
時には、スコープは直感に反することもあるけど。
1.*グローバルスコープの変数*
|
- ローカルスコープ
|
- 中級:JavaScriptにブロックスコープなんてものは存在しない(ES5; ES6では
let
が導入された)
a.
|
b.var a = 1;function one() { if (true) { let a = 4; } alert(a); // 'let'キーワードがブロックスコープを使用するため、'1'を警告}
- 中級**:Objectプロパティ
|
- 上級:Closure
|
- 上級**:プロトタイプベースのスコープ解決
|
- グローバル+ローカル:必要以上に複雑なケース
|
undefined
と10 'ではなく
5と
10`を出力。JavaScriptは変数宣言(初期化ではない)を常に先頭に移動し、以下のコードと同等になる。
|
- キャッチ節のスコープを持つ変数
|
これは 5
、6
、 5
を出力する。 catch節はe
はグローバルにもローカル変数にも影響を持つ。でも、この特別なスコープはキャッチされた変数に対してのみです。var f;
をcatch節の中に書くと、try-catchブロックの前または後に定義した場合とまったく同じ。
By Triptych | 回答日時: 2009年2月1日 8:58