「JavaScript変数作用領域」に関する試験
2409 ワード
結論を先に言います
JavaScriptでは、変数宣言にバンド PS.本質的な原因を理解するためには、<>の第7章を参照することができます.本質的な原因は、JavaScriptが
試験01--変数をvarで宣言する
対照的に、PHPは声明がなければ
PHP Notice:Unidefined variable
試験03--発泡探し
試験04--グローバル変数が汚染されています.
参考文献<>第7章--名前と役割領域 文章の歴史 2016/12/21(初回発表) 2017/07/13は<>;を参照しました. もしあなたが私の文章があなたに役立つと思うなら、改善のためのアドバイスや「好き」をしてください.
JavaScriptでは、変数宣言に
var
を使用することを強く推奨しています.var
を使用しないで変数を宣言することもできますが、本質的には違いがあります.var
は、「現在のスコープで変数を宣言し、値を賦与する」と表している.var
を持たないと、(内から外へ)割り当てが必要なオブジェクトを探して泡が立って、グローバル変数を汚染します.var
で宣言した変数を“静的な作用領域”と見なし、宣言されていない変数を“グローバルスコープ”と見なしています.試験01--変数をvarで宣言する
window.str = 'GuangDong';
function t1(){
var str = 'GuangZhou';
function t2(){
var str = 'FoShan';
alert(str);
}
t2();
}
t1();
alert(window.str);
出力結果:FoShan
GuangDong
試験02--泡を出して探します.window.str = 'GuangDong';
function t1(){
var str = 'GuangZhou';
function t2(){
alert(str);
}
t2();
}
t1();
alert(window.str);
出力結果:GuangZhou
GuangDong
解析:t2()
関数内のstr
変数はvar
を使っていないので、「賦値」だけでは、外に泡が出て、賦課すべき変数を探します.t1()
関数のvar str = 'GuangZhou'
を発見しました.対照的に、PHPは声明がなければ
alert('GuangZhou')
、エラーが発生します.$str = 'GuangDong';
function t1(){
$str = 'GuangZhou';
function t2(){
echo $str;
}
t2();
}
t1();
このPHPのデモはエラーを報告します.PHP Notice:Unidefined variable
試験03--発泡探し
window.str = 'GuangDong';
function t1(){
function t2(){
alert(str);
}
t2();
}
t1();
alert(window.str);
出力結果:GuangDong
GuangDong
解析:str
はalert(str)
内部でt2()
変数が見つからず、泡が外に探してもstr
変数が見つからず、泡が外に探し続けています.大域変数t1()
が発見されたので、str
を出力します.試験04--グローバル変数が汚染されています.
window.str = 'GuangDong';
function t1(){
function t2(){
str = 'FoShan';
alert(str);
}
t2();
}
t1();
alert(window.str);
出力結果:FoShan
FoShan
解析:window.str
の中のGuangDong
変数はt2()
を使用していないので、泡を出して外を探して、str
を見つけて、その割当値をvar
にします.したがって、グローバル変数window.str
を出力すると、FoShan
を出力します.参考文献