2

jqueryの.each()関数のドキュメントを見ると、次のメソッドシグネチャが示されています。

.each( function(index, Element) )

http://api.jquery.com/each/

thisコールバック内で使用できるようにインデックスを渡す必要があることは理解できますが、キーワードで現在の要素を参照できるのに、なぜElementパラメーターを明示的に含めるのでしょうか。選択したインスタンス名を指定できるようにするためだけにありますか?つまり、jqueryオブジェクトを取得するために、名前付きインスタンスをjqueryメソッドでラップする必要がある場合は、?$()とまったく同じではありません。thisドキュメントには、なぜそこにあるのかについては言及されていないようです。

アップデート:

これは閉鎖と関係があると思いますが、よくわかりません。私が「名前付きインスタンス」と呼んでいるのは、実際には、コールバックのスコープ内の変数に格納されている配列内の要素のローカルコピーまたはクローンのようです。それを使用thisすることで、ある種のクロージャであるかのように変数を参照しているのではないかと思います。@thecodeparadoxは、Firebugコンソールで何かを見つけて、これについて考えさせられました。ただし、違いが何であるか、または配列内の要素のローカルスコープの値が必要になる理由はまだよくわかりません。

4

2 に答える 2

1

Elementループが発生するオブジェクトの各要素を指します。コールバック関数内では、を使用して各値を取得することもできますthis

例えば:

$(['a','b', 'c']).each(function(i, el) {
  console.log(el);
  console.log(this); 
});

私が見つけた一つのこと

上記の例では、console.log(el)次の結果が表示されます。

a, b, c..

ただし、表示される場合は、console.log(this)Stringオブジェクトが表示されます。

console.log(el)あなたが書く必要があるのと同じ出力を得るにはconsole.log( this[0] )

つまり、元の値を直接取得することを意味しますel。つまり、コールバックパラメータは信頼性が高く簡単です。

ファイアバグを開き、出力を確認します

于 2012-09-13T22:06:21.827 に答える
1

「this」のコンテキストは.eachブロック内で頻繁に変更される可能性があるため、要素への参照を提供するため、「var that=this;」のような操作を行う必要がなくなります。

于 2012-09-13T22:07:23.870 に答える