/* コード 1 */
varscope = "グローバル " ;
関数 checkScope() {
var スコープ = "ローカル ";
関数 childCheck() {
var スコープ = "childLocal ";
document.write(scope);
}
function childUnknown() {
document.write(scope);
var スコープ;
}
function childOverride() {
scope = "childOverride "; 🎜>document .write(scope);
}
document.write(scope); //「childLocal」を出力します。 /Output" unknown"
childOverride(); // 出力 "childOverride"
document.write(scope); // 出力 "childOverride"
}
checkScope(); childLocal unknownchildOverride childOverride "
document.write(scope); //出力 "global "
グローバル スコープとローカル スコープ
グローバル (グローバル) 変数のスコープは、JavaScript ではグローバルです。あらゆる場所に定義があり、関数内で宣言された変数はローカル変数であり、そのスコープはローカルであり、関数本体内でのみ定義されます。次の出力は読者にとって驚くことではありません。
var スコープ = "グローバル";
関数 checkScope() {
var スコープ = "ローカル";
}
checkScope(); local"
document.write(scope); //出力 "global"
var ステートメントを使用せずにグローバル変数スコープ内の変数を使用できますが、宣言する場合は var ステートメントを使用する必要があります。それ以外の場合は、グローバル変数への参照として扱われます。以下のコードを見てください:
コードをコピー
関数 checkScope() {
スコープ = "ローカル";
checkScope() ; //output" local"
document.write(scope) //output "local"
ブロック スコープがありません。JavaScript にはブロック レベルのスコープがありません。関数は関数全体の中にあり、それらはすべて定義されています。次のコードは、馴染みのない読者にとっては驚くかもしれません:
コードをコピー
コードは次のとおりです:
document.write(scope);
}
checkScope(); //出力 "unknownlocal"
ステートメント 4.1 (varscope = "local") ; ) 宣言された変数は checkScope 関数のスコープ全体内で有効であるため、ステートメント 4.2 (document.write(scope); ) が実行されるとき、スコープはローカル変数を参照しますが、この時点ではローカル変数のスコープはまだ定義されていません。なので、「未定義」が出力されます。したがって、プログラミングの適切な実践は、関数の先頭ですべての変数宣言をグループ化することです。
上記の内容を理解した上で、コード 1 を見て読者が混乱することはありません。
オブジェクトの属性変数
オブジェクトの属性変数は、以下のコードを見れば比較的簡単に理解できるはずです。
コードをコピー
コードは次のとおりです:
document.write(scope); // "loacl" を出力します。
document.write(this.scope); // "オブジェクト" を出力します。
document.write(window.scope); // 出力します。 global"
}
obj.checkScope(); //「loacl オブジェクト グローバル」を出力