3

JavaScriptとjQueryで変数がどのように格納されるかをよりよく理解しようとしています。

以下のコードを使用して、.default-value要素ごとにdefault_valueという個別の変数が作成されます。これは正しいです?それを作成した無名関数内からのみアクセスできますか?「名前空間」という用語を聞いたことがありますが、それは当てはまりますか?何が起こっているのかをよりよく理解できるように、追加の詳細を提供してください。

次に、これを特定のクラスのグループではなく特定のIDを持つ要素に適用したい場合、each()を使用する必要はないように見えます。どのように変更する必要がありますか?

$('.default-value').each(function() {
    var default_value = this.value;
    $(this).focus(function() {
        if(this.value == default_value) {
            this.value = '';
        }
    });
    $(this).blur(function() {
        if($.trim(this.value) == '') {
            this.value = default_value;
        }
    });
});
4

4 に答える 4

7

以下のコードを使用して、.default-value要素ごとにdefault_valueという個別の変数が作成されます。これは正しいです?

はい。関数はそれぞれに対して呼び出され、変数は(を介して)関数にスコープvarされます。

それを作成した無名関数内からのみアクセスできますか?

はい(関数はより多くの無名関数を作成し、それらは渡された関数内にあるeachため、それらもアクセスできることに注意してください)。

「名前空間」という用語を聞いたことがありますが、それは当てはまりますか?

いいえ

于 2012-04-30T16:25:21.170 に答える
3

あなたが話しているのはスコーピングです。

基本的に、関数内でvarキーワード(必要なもの)を使用する場合、変数は現在のスコープ(この場合は無名関数)でのみ使用できます。

キーワードをスキップした場合、変数はスコープvarで使用可能になります。global

DOMでID(常に一意)を持つ要素を取得する場合は、次のようにするだけです。

$('#theid').focus(function() { });

あなたができるもう一つのことは、と:hoverの両方を処理するJqueryを使用することです。.focus().blur()

$('#theid').hover(function() {
  // focus in your code
}, function() {
  // blur in your code
});
于 2012-04-30T16:26:15.613 に答える
2

javascriptで変数の前にvarを付けると、呼び出されたスコープ内に変数が含まれるため、作成した各ループの外部ではvardefaulf_valueにアクセスできません。

var宣言がないと、ページ上でグローバルになります。

JSONスタイルのオブジェクトを使用してJavaScriptで変数に名前空間を付けることができます。

javascriptを書いているときは、次のような名前空間を定義する傾向があります。

mynamespace = {};

次に、その名前空間内に変数を作成する場合は、次のように呼び出すことができます。

mynamespace.variableA = "Hello there";

これは、ページ上の既存の変数を上書きしたくない場合に便利なメカニズムです。たとえば、次のようになります。

variableA = "First hello there";
mynamespace.variableA = "Second hello there";

console.log(variableA);
console.log(mynamespace.variableA);

印刷されます:

"First hello there"
"Second hello there";

同じ変数名を使用したとしても、2番目の変数名を拡張しても、最初の変数名は別の名前空間にあるため、オーバーライドされません=)

于 2012-04-30T16:29:41.153 に答える
1

.default-value要素ごとにdefault_valueという個別の変数が作成されます。これは正しいです?

はい、その通りです。default_valueは、ドキュメントで見つかったjQueryノードごとに作成されます。関数を定義するたびに、プライベート変数を含むことができるオブジェクトを作成します。

それを作成した無名関数内からのみアクセスできますか?

はい。ただし、無名関数内で作成された関数からもアクセスできます。

「名前空間」という用語を聞いたことがありますが、それは当てはまりますか?

名前空間という用語は、関数と変数のコンテナーを示します。新しいJSライブラリを作成する場合は、他のライブラリとの競合を避けるために非常に重要です。したがって、グローバルな「ロード」関数を作成する代わりに、その関数を含む名前空間を作成します。

var myLibraryUniqueName = {};
myLibraryUniqueName.load = function() {};

もちろん、ライブラリが複雑な場合は、内部名前空間を作成できます。

myLibraryUniqueName.loginModule = {};
myLibraryUniqueName.animationModule = {};
...

次にあなたは尋ねました:

特定のクラスのグループではなく、特定のIDを持つ要素にこれを適用したい場合、each()を使用する必要はないように見えます。どのように変更する必要がありますか

function defaultValue(node) {
  var default_value = node.value;
  node.focus(function() {
      if(node.value == default_value) {
          node.value = '';
      }
  });
  node.blur(function() {
      if($.trim(node.value) == '') {
          node.value = default_value;
      }
  }
}
defaultValue($('#id'));
于 2012-04-30T16:39:36.227 に答える