JavaScript の権威ガイド 学習ノート 変数スコープの共有_JavaScript スキル

WBOY
リリース: 2016-05-16 18:01:40
オリジナル
1031 人が閲覧しました

言語における変数の「宣言」と「定義」をどのように理解しているのかわかりません。
私の理解は次のとおりです:
変数を「宣言」することは、変数を「定義」することを意味します。を宣言し、値を割り当てることを意味します。
例:

コードをコピー コードは次のとおりです。

var name; //単なるステートメント
var num = 11;//宣言と代入、つまり定義されています
varpassword = "yangjiang";//宣言と代入、つまり定義されています

以下はいくつかのポイントの概要です:
変数のスコープ: グローバルとローカル。 (注: 宣言されていない変数の値を読み取ろうとすると、JavaScript はエラーを生成します)
最初のポイント: var キーワードを使用して変数を変更する場合、ローカル変数または関数パラメーターが宣言されている場合、名前
がグローバル変数の名前と同じである場合、グローバル変数は事実上非表示になります。
例:
コードをコピー コードは次のとおりです:

varscope1 = "global"; //var 変更
関数 checksScope(){
varscope1 = "ローカル";//var 変更
document.write(scope1);// local

2 番目のポイント: var キーワードなしで宣言された変数を指定しようとすると、変数が
内でのみ使用されている場合でも、暗黙的に宣言された変数は常にグローバル変数として作成されます。関数本体 (関数が実行された場合にのみ有効になります。) 関数のネストはサポートされていないことに注意してください。
例:

コードをコピーします コードは次のとおりです:
scope2 = " globalAAAAAA";/ / var の変更は使用されません (js がデフォルトでグローバル変数として宣言します)
function checkScopeA(){
scope2 = "localAAAAA"; // var の変更は使用されません (js が宣言します)デフォルトではグローバル変数として使用されます)
document.write("
"scope2);
myscope = "myLocalAAAAA";//変数の変更は使用されません (js はグローバル変数として宣言します)デフォルトでは変数)
document.write ("," myscope);
}
checkScopeA();//localAAAAA, myLocalAAAA *A
document.write("
" scope2);//localAAAAA *B
document.write("
" myscope);//myLocalAAAAA *C

の *A のコードをコメントアウトすると、上記の例、
例:

コードをコピー コードは次のとおりです:
scope2 = "globalAAAAA";//var の変更は使用されません (js はデフォルトでグローバル変数として宣言します)
function checkScopeA(){
scope2 = "localAAAAA";//var の変更は使用されません(js はデフォルトでグローバル変数として宣言します)
document.write("
"scope2);
myscope = "myLocalAAAAA";//var の変更は使用されません (js は宣言します)デフォルトではグローバル変数として使用されます)
document.write("," myscope );
}
//checkScopeA(); *A
document.write("
"scope2);//globalAAAAA *B
document.write("< br/>" myscope);//エラーが発生しました *C

関数 checkScopeA が実行されていないため、*B の出力は globalAAAAA;
関数 checkScopeA が実行されないため、変数 myscope は宣言されていないため、宣言されていない変数を読み取ろうとするとエラーが発生します。
3 番目のポイント:
JavaScript では、関数定義を入れ子にすることができます。各関数には独自のローカル スコープがあるため、ローカル スコープを複数のネストされたレベルにすることができます。
例:

コードをコピー コードは次のとおりです:
varscope3 = "globalscope" ; //グローバル変数が定義されています
function checkScopeB(){
varscope3 = "localscope" //ローカル変数が定義されており、グローバル変数scope3をオーバーライドします
functionnested( ){
varscope3 = "ネストされたスコープ"; //ローカル変数は関数
document.write("
"scope3) の関数内で定義されます。 //ネストされたスコープ
}
nested();
}
checkScopeB();//ネストされたスコープ

4 番目のポイント:
JavaScript にはブロックレベルのスコープはありません、関数内で宣言されます。すべての変数は、宣言された場所に関係なく、関数全体で宣言されます。
JavaScript にはブロックレベルのスコープはありません。関数内で定義されたすべての変数は、どこで定義されているかに関係なく、関数全体で定義されます。
例:

コードをコピー コードは次のとおりです:

function test(o){//上記の説明によると、この関数の 3 つの変数 i、j、k のスコープは同じです。
var i = 0; //変数 i は関数全体で定義されます
if(typeof o == "object"){
var j = 0; //変数 j は関数全体で定義されますif ステートメント ブロック内だけではありません
for(var k=0;k<10;k){//変数 k は、if ステートメント ブロック内だけでなく関数全体で定義されています
document.write( "
k の値は次のとおりです: " k);
}
document.write("
for ループ外の k の値: " k);この時点では K はまだ定義されており、k=10
}
document.write("
value of j:" j); //変数 j は宣言されていますが、宣言されている可能性があります。関数に渡されるパラメータはオブジェクトではない可能性があり、if ステートメント ブロックは実行されないため、初期化されていません。
}

この関数は 2 つの方法で呼び出されます:
メソッド 1 : 入力オブジェクトを渡す
test({});//出力結果: 上記例のコメント
方法 2: 何も渡さない
test();// 出力結果: j の値: 未定義
理解できないのは、2番目のメソッドの出力結果が未定義である理由です。当時私が推測したのは次のとおりです: j の値: 0
その後、この本では次のように述べられました:
ローカル変数は関数本体全体で宣言 (または定義) されるため、これは関数本体全体で同じ名前のグローバル
変数は に隠されています。ローカル変数は関数本体全体で宣言 (または定義) されますが、var ステートメントが実行される前には初期化されません。
この場合、変数 j が関数全体で定義されており、関数に渡されるパラメーターが空であるため、上の 2 番目のメソッドの呼び出しの出力結果が説明しやすくなります。関数本体は実行されないため、 j の値は未定義になります (これは上記の本の文章に基づく私の理解です)
次の例は、より適切な説明です:
コードをコピーします コードは次のとおりです。

var sssss = "グローバル変数"
function f(){
; document.write ("
" sssss);//出力: 「グローバル変数」を出力する代わりに未定義
var sssss = "ローカル変数"
document.write("
}
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!