ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript 変数スコープ分析_JavaScript スキル

JavaScript 変数スコープ分析_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:05:13967ブラウズ
コードをコピー コードは次のとおりです:

/* コード 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 ではグローバルです。あらゆる場所に定義があり、関数内で宣言された変数はローカル変数であり、そのスコープはローカルであり、関数本体内でのみ定義されます。次の出力は読者にとって驚くことではありません。



コードをコピーします コードは次のとおりです: /* コード 2 */
var スコープ = "グローバル";
関数 checkScope() {
var スコープ = "ローカル";
}
checkScope(); local"
document.write(scope); //出力 "global"


var ステートメントを使用せずにグローバル変数スコープ内の変数を使用できますが、宣言する場合は var ステートメントを使用する必要があります。それ以外の場合は、グローバル変数への参照として扱われます。以下のコードを見てください:



コードをコピー
コードは次のとおりです: /* コード3 */ var スコープ = "グローバル";
関数 checkScope() {
スコープ = "ローカル";
checkScope() ; //output" local"
document.write(scope) //output "local"


ブロック スコープがありません。JavaScript にはブロック レベルのスコープがありません。関数は関数全体の中にあり、それらはすべて定義されています。次のコードは、馴染みのない読者にとっては驚くかもしれません:



コードをコピー


コードは次のとおりです:
/* コード 4 */ varscope = "global"; function checkScope() { document.write(scope); // ステートメント 4.1 varscope = "local"; /ステートメント 4.2
document.write(scope);
}
checkScope(); //出力 "unknownlocal"


ステートメント 4.1 (varscope = "local") ; ) 宣言された変数は checkScope 関数のスコープ全体内で有効であるため、ステートメント 4.2 (document.write(scope); ) が実行されるとき、スコープはローカル変数を参照しますが、この時点ではローカル変数のスコープはまだ定義されていません。なので、「未定義」が出力されます。したがって、プログラミングの適切な実践は、関数の先頭ですべての変数宣言をグループ化することです。

上記の内容を理解した上で、コード 1 を見て読者が混乱することはありません。

オブジェクトの属性変数
オブジェクトの属性変数は、以下のコードを見れば比較的簡単に理解できるはずです。




コードをコピー


コードは次のとおりです:
/* コード 5 */ var スコープ = "グローバル "; var obj = new Object(); obj.scope = function () { var スコープ = "loacl ";
document.write(scope); // "loacl" を出力します。
document.write(this.scope); // "オブジェクト" を出力します。
document.write(window.scope); // 出力します。 global"
}
obj.checkScope(); //「loacl オブジェクト グローバル」を出力

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。