Hatena::Groupjavascript

JavaScriptで遊ぶよ

 | 

2009-09-09

forとforEach

02:51

これ系の話を読む度に思うのがこれ。

まずは、以下の HTML に対して

<ul>
 <li>hoge</li>
 <li>fuga</li>
 <li>piyo</li>
</ul>

以下の JavaScript を実行して

var list = document.querySelectorAll('ul > li');

for (var i = 0, len = list.length; i < len; i++) {
    var node = list[i];
    var text = node.textContent;
    node.onclick = function() { alert(text) }; // (1)
}

"hoge" と書いてある要素をクリックすると "piyo" と表示される。

for 文と無名関数のイディオム - IT戦記

それとか、高速に処理するためにループの内容は非同期で実行したらいいんじゃね?とか思って

var ary = ["foo1","foo2","foo3"];

for (var i = 0, len = ary.length; i < len; i++) {
  setTimeout(function(){
    document.getElementById(ary[i]).style.display = "none";
  },0);
}

とかやると、意図しない結果になる。(まあこの例では普通にクラス使えよって話だけど)

forEach だと当然関数スコープを使うので、意図した通りに動く。

「forEach より for のほうが速いよ」って書くときに、一言「でも forEach を使わないとハマるコードもあるよ」と付け加えておいたほうがいいんでないの、と思ったり。

それが面倒だから (というか万人を educate するのは不可能だから) とにかく forEach を使っといたらいいよって言うのもありなのかなーとか。

トラックバック - http://javascript.g.hatena.ne.jp/edvakf/20090909
 |