1

ネイティブに提供されている車輪を再発明しているようですね。フレームワークの重みを追加する価値は本当にありますか? for...inこれらのフレームワークは、機能の目的をうまく果たしているように見えるのに、なぜ追加機能として定義する必要があると感じているのでしょうか?

4

4 に答える 4

4

配列を反復処理するために使用することを避けるのには、いくつかの理由があります。for..in

$.eachそして、Javascript1.6_.eachで導入される前に代役を務めます。Array.forEach

于 2012-09-05T06:39:45.350 に答える
3

たとえば、次のようなことをするとします。

for (var i = 0; i < 5; i += 1) {
  document.getElementById('el' + i).onclick = function () {
    alert(i);
  };
}

次に、すべての要素をクリックすると5、コンテキストをキャッチするため取得され、i変数はそれぞれの場合で同じです。

次の方法で修正できます。

for (var i = 0; i < 5; i += 1) {
  (function (i) {
    document.getElementById('el' + i).onclick = function () {
      alert(i);
    };
  })(i);
}

しかし、eachそれはより良いので、そうするとき(良い例ではなく、デモンストレーションのためだけです):

$('.el').each(function (i) {
  $(this).click(function () { alert(i); });
});

関数に変数を渡すとコンテキストが失われるため、正常に動作します。

于 2012-09-05T06:37:06.973 に答える
1

for ... inまた、プロトタイプ チェーンのプロパティをキャッチします。メソッドを使用して.hasOwnProperty()物事を除外する必要があります。

于 2012-09-05T06:43:41.383 に答える