-5
$(document).ready(function(){
  var someVar = $("non_existing_element");
});

ブラウザコンソールで

> $("non_existing_element");
[]

しかし

> someVar
ReferenceError: someVar is not defined

なぜこのように実装されているのですか?someVar呼び出しも返さ[]れた場合、または少なくとも両方の呼び出しが同じものを返した場合、あまり意味がありませんか?

4

1 に答える 1

1

変数のスコープについて30 90 秒

$(document).ready(function(){
  var someVar = $("non_existing_element");
});

この時点でsomeVar、実際には equal[]です。したがって、次のように書くとします。

$(document).ready(function(){
  var someVar = $("non_existing_element");
  console.log("the value of someVar is", someVar);
});

コンソールに表示されます

someVar の値は [] です

万歳!

しかし!

最後の中括弧を通過するとすぐに...

$(document).ready(function(){
  var someVar = $("non_existing_element");
}); // <<<<< This one

で定義された関数を残しましたfunction() {}これには名前がないため、無名関数と呼ばれることに注意してください。政治や経済への復讐はありませんのでご安心ください。

関数を終了すると、 で定義された変数にvarアクセスできなくなります。これは、まったく別の会話であるスコープ リークを防ぐためです。これについては、すぐに学習できると思います。なしで定義してみてくださいvar。何が起こるか見てください。

使用しないvarと、変数は惨めな匿名関数のクラッチから逃れることができ、グローバルスコープ全体で自分自身をがらくたにすることができます。(ちなみに、これは からアクセスできますwindow.global_variable

したがって、コンソールに変数を入力すると (ブレークポイントを使用している場合は適用されません)、変数はグローバル スコープから読み取られます。これは、関数にいないためです。そして、変数のスコープをあなたが入っていない関数に限定していることを発見したvarので、それが未定義である理由がわかりました。

checkboxつまり、 !という名前の変数が 1 つしかない場合を想像してみてください。入れたすべての Javascript プラグインは、互いに競合します。何checkboxがあったかは誰にもわかりません。気が付くと、DOM 全体でクレイジーなことが起こっています。

教訓: 変数のスコープを設定します。変数を理解します。あなたの変数を愛してください。

于 2013-10-28T12:51:22.457 に答える