など。たとえば、コードの特定の行で、宣言された変数 x を使用したいとします。その結果、入力またはスペルミスにより、変数は y と等価になります。実際のプログラミングプロセスでは、この種のエラーを見つけるのが難しい場合があります。
加えて、今日、同僚の紹介で、この「暗黙の宣言」の別の問題点を知りました。
現在のコンテキストでこの「暗黙的」宣言を行うと、JavaScript エンジンはまず現在のコンテキストを調べて、この変数が以前に宣言されているかどうかを確認し、そうでない場合は、前のコンテキストに移動して検索します。見つからなかったので、最終的にウィンドウ上でこの変数を宣言します。
例:
y。 = "こんにちは" ;
関数 func(){
y = "ああ、いいえ!!!"
関数(); // #=> display "OH, NO!!!"
コンテキスト内のいずれかのレイヤーにそのような「暗黙的に」定義された変数がある場合、新しい変数を生成する代わりに、そのレイヤー内の変数が変更されます。ウィンドウ上の変数。 (この種のバグは、特により複雑なコードをカプセル化する場合に非常に厄介です)
例:
var x = "window.x";
function a() {
var x = "a's x";
var b = function() {
var c = function() {
// var!
x = "c の x:";
alert("before c run,the b.x:" x); ;
c();
alert("c の実行後、b.x:" x);
alert("a.x は:" x);
alert("b 関数の実行後、a.x は:" x);
alert("実行前、window.x:" x); 🎜 >alert("after a run, window.x:" x);
次の層があります: window、func a、func b、func c は常に階層的に入れ子になっています。 window->a->b->c
window と a の両方に変数が定義されています 変数の値。
JavaScript で変数を宣言するときは、その前に var を追加する必要があることに注意してください。