javascript変数:グローバル?局部ですか?これは注意が必要です
2259 ワード
JSには、ブロックレベルのスコープがありません.
二つの例を挙げます.
if文ブロック:
文のブロック;
出力:Ling
つまり最後の結果はwindowの下のグローバル変数です.
1、Varの有無
Varがある場合は、関数内部で変数が局所変数であることを宣言します.以下の例では、nameのデータは読み込めません.
2、グローバル変数とローカル変数の名前は同じです.
undefined
local
なぜこのような結果が出たのですか?なぜなら、
javascript変数範囲(1)グローバル変数のスコープは大域的な役割領域であり、Javascriptプログラム全体において、グローバル変数の役割は至るところに存在します.「script」ブロックにおいて、「function」関数の外に定義されます.(2)局所変数のスコープは局所的であり、関数内部または関数パラメータの場合に定義され、作用範囲は関数から末尾まで(ここで説明します)(3)関数内部であり、局所変数の優先度は同じ名前の大域変数よりも高いです.大域変数名と同じローカル変数(パラメータを含む)が存在すると、大域変数は機能しなくなります.
もとはこの原因です.分かりましたか?
グローバル変数とローカル変数の名前を変更すると、この問題はどう解決されますか?
ははは~~一番簡単なのは、グローバル変数とローカル変数の出会いを避けることです.
もう一つの方法があります.windowオブジェクトのすべての属性はグローバルスコープを持っています.window.グローバル変数名は次の通りです.
締め括りをつける
上の問題は実は反映されているもう一つの問題です.ネーミング規範の問題は、ネーミングが規範化されていないと、多くの予想外の問題が発生します.だから、時間をかけてインターネットを利用して、いくつかの異なるネーミングのルールを調べてみます.このようにコードを作成する時、不要な面倒を減らすことができます.
二つの例を挙げます.
if文ブロック:
if (true){
var name='Ling';
}
alert(name);
出力:Ling文のブロック;
for(var i=0;i<10;i++) {
var name='Ling';
}
alert(i);
alert(name);
出力:10出力:Ling
つまり最後の結果はwindowの下のグローバル変数です.
<span style="font-family:KaiTi_GB2312;">alert(window.i);
alert(window.name);</span>
Javascriptの関数体には、以下のようないくつかの状況があります.1、Varの有無
Varがある場合は、関数内部で変数が局所変数であることを宣言します.以下の例では、nameのデータは読み込めません.
<span style="font-family:KaiTi_GB2312;">function box(){
var name ='Ling';
}
alert(name);</span>
varを削除すると、Lingが出力されます.このとき宣言された変数はグローバル変数です.コードを書く過程で、varを適用しないで初期変数にすると、多くの予期せぬことが発生しますので、初期変数の時は必ずvarを加えます.2、グローバル変数とローカル変数の名前は同じです.
<span style="font-family:KaiTi_GB2312;">var scope="global";
function t(){
alert(scope);
var scope="local"
alert(scope);
} </span>
最終的な出力結果は:undefined
local
なぜこのような結果が出たのですか?なぜなら、
javascript変数範囲(1)グローバル変数のスコープは大域的な役割領域であり、Javascriptプログラム全体において、グローバル変数の役割は至るところに存在します.「script」ブロックにおいて、「function」関数の外に定義されます.(2)局所変数のスコープは局所的であり、関数内部または関数パラメータの場合に定義され、作用範囲は関数から末尾まで(ここで説明します)(3)関数内部であり、局所変数の優先度は同じ名前の大域変数よりも高いです.大域変数名と同じローカル変数(パラメータを含む)が存在すると、大域変数は機能しなくなります.
もとはこの原因です.分かりましたか?
グローバル変数とローカル変数の名前を変更すると、この問題はどう解決されますか?
ははは~~一番簡単なのは、グローバル変数とローカル変数の出会いを避けることです.
もう一つの方法があります.windowオブジェクトのすべての属性はグローバルスコープを持っています.window.グローバル変数名は次の通りです.
<span style="font-family:KaiTi_GB2312;">var scope="global";
function t(){
alert(window.scope);
var scope="local"
alert(scope);
} </span>
これで問題も終わりです.締め括りをつける
上の問題は実は反映されているもう一つの問題です.ネーミング規範の問題は、ネーミングが規範化されていないと、多くの予想外の問題が発生します.だから、時間をかけてインターネットを利用して、いくつかの異なるネーミングのルールを調べてみます.このようにコードを作成する時、不要な面倒を減らすことができます.