javascriptの変数範囲
7432 ワード
javascriptの中の変数の範囲はずっと頭を使っていますが、実は少し分かりました.複雑ではありません.
入門の知識
理解する前に、次の2つの文を読む必要があります.最初の文の意味は、先にleft 1という名前の変数を宣言してから、このleft 1変数 に値を付与します.第二文の意味は、「Right」という値をleft 2という名前の変数に割り当てて、「声明」という動作はありません.以下の点に注意してください. は、賦課前に変数left 2を宣言する文(すなわち「var left 2」)が書かれていない場合、javascriptはこの変数を暗黙的に宣言し、 を賦与する.
スコープ
javascriptでは、一つのスコープ内の変数は大域的であり、大域的なものであるからこそ、その変数はそのサブスコープ内にも見られます.
変数はグローバル(第一版)です.
出力結果は
変数はグローバル(第二版)です.
出力結果は
変数はグローバル(第三版)です.
出力結果は
鬼ごっこが好きなundefined(第一版)
まずは簡単に出発します.
サブスコープ、つまりfメソッド体を追加します.
鬼ごっこを始めましょう.
第一段
第五段(第三段と比較してください.)
第七段
入門の知識
理解する前に、次の2つの文を読む必要があります.
var left1="right";
left2="right";
説明しますスコープ
javascriptでは、一つのスコープ内の変数は大域的であり、大域的なものであるからこそ、その変数はそのサブスコープ内にも見られます.
変数はグローバル(第一版)です.
出力結果は
oneone
です.<script language="javascript">
var left="one";// ,
function f() { // f , left , f left ,
document.write(left); // one
}
f();// f , one
document.write(left);// one
</script>
何も言うことがないので、コメントを見てください.でも、ちょっと気になります.コードを変えてみたらどうなりますか?そこで第二版があります.変数はグローバル(第二版)です.
出力結果は
twotwo
です.<script language="javascript">
var left="one";
function f() {
left="two"; // ++++++++++++++++++++++++++
document.write(left);
}
f();// f
document.write(left);
</script>
これもよく分かります.プリントする前に変数leftが再割り当てされました.次のバージョンを見てください.変数はグローバル(第三版)です.
出力結果は
twoonetwo
です.<script language="javascript">
var left="one";
function f() {
var left; // ++++++++++++++++++++++++++
left="two";
document.write(left); // two
}
f();// f
document.write(left);// one
f();// f , ++++++++++++++++++++++++++
</script>
第三版は比較的に重要です.サブスコープではグローバル変数です.(前にvarがあることに注意してください.)また同じ名前の変数leftを宣言しました.この変数leftは現在のスコープではグローバル変数です.以前はoneとして記録されていたleftは現在のスコープでは消えてしまいます.外(fメソッドの外)は、2つのleft変数が相互に分離されていることが分かります.鬼ごっこが好きなundefined(第一版)
まずは簡単に出発します.
<script language="javascript">
<script language="javascript">
var left;
left="one";
document.write(left);// one
</script>
, undefined
<script language="javascript">
var left;
document.write(left);// undefined
</script>
, undefined, ,
<script language="javascript">
document.write(left);// undefined
var left;
left="one";
</script>
,left ,javascript left
, ,
<script language="javascript">
left="one";//
var left; //
document.write(left);// one
</script>
鬼ごっこが好きなundefined(第二版)サブスコープ、つまりfメソッド体を追加します.
<script language="javascript">
<script language="javascript">
var left;
function f() {
document.write(left); // undefined
}
f();
</script>
, one,
<script language="javascript">
var left;
left="one";
function f() {
document.write(left); // one
}
f();
</script>
( ), undefined, , left
<script language="javascript">
var left;
left="one";
function f() {
var left;// left
document.write(left); // undefined
}
f();
</script>
, , two, , left
<script language="javascript">
var left;
left="one";
function f() {
var left;// left
left="two";
document.write(left); // two
}
f();
</script>
( ), twoone,f ,f left , left
<script language="javascript">
var left;
left="one";
function f() {
var left;// left
left="two";
document.write(left); // two
}
f();
document.write(left); // one
</script>
( ), undefinedone
var left; , , left
, document.write , (var )
var write , var
<script language="javascript">
var left;
left="one";
function f() {
document.write(left); // undefined
var left;// left
}
f();
document.write(left); // one
</script>
鬼ごっこが好きなundefined(第三版)鬼ごっこを始めましょう.
第一段
<script language="javascript">
var left;
left="one";
function f() {
left="two";
document.write(left);
}
f();
document.write(left);
</script>
何をプリントアウトしますか?twotwo
第二段<script language="javascript">
var left;
left="one";
function f() {
left="two";
document.write(left);
}
document.write(left);
f();
</script>
何をプリントアウトしますか?onetwo
第三段<script language="javascript">
var left;
left="one";
function f() {
left="two";
document.write(left);
}
document.write(left);
f();
document.write(left);
</script>
何をプリントアウトしますか?onetwotwo
第四段<script language="javascript">
var left;
function f() {
document.write(left);
left="two";
}
document.write(left);
f();
document.write(left);
</script>
何をプリントアウトしますか?undefinedundefinedtwo
上の四段の中で、ずっと一つの作用域しかないです.二つのft変数がお互いに喧嘩している状況がないので、判断しやすいでしょう.次は二つの作用域です.喧嘩を始めました.第五段(第三段と比較してください.)
<script language="javascript">
var left;
left="one";
function f() {
var left="two";
document.write(left);
}
document.write(left);
f();
document.write(left);
</script>
何をプリントアウトしますか?onetwoone
第六段(第四段と比較してください.)<script language="javascript">
var left;
left="one";
function f() {
var left;
document.write(left);
left="two";
}
document.write(left);
f();
document.write(left);
</script>
何をプリントアウトしますか?oneundefinedone
第六段<script language="javascript">
var left;
left="one";
function f() {
document.write(left);
var left="two";
}
document.write(left);
f();
document.write(left);
</script>
何をプリントアウトしますか?oneundefinedone
は、このセクションは第5のセクションと同様であり、var left="two";
は、var left;
+left="two";
と見なされ、var left;
は最上部に浮いて優先的に実行されるので、第5のセクションと同様である.第七段
<script language="javascript">
var left;
left="one";
function f() {
document.write(left);
var left="two";
document.write(left);
}
document.write(left);
f();
document.write(left);
</script>
何をプリントアウトしますか?oneundefinedtwoone
、説明しない