2011-04-19 16 views
2

Javascriptの「forEachの」ループ質問

list.forEach(callback, this); 

を私は理解して「forEach」ここで使用する「this」キーワードを除くループ、「this」とは何を意味するのでしょうか?

for(var n=0; n<list.length; n++){ 
    callback(list[n]); 
} 

しかし、 'this' を何がforEach(callback, this)に意味:私はforループの正常にlist.forEach(callback)を変換する場合

、私はそれがあると思いますか? thisでは、上記のように通常のforループに変換すれば、何を追加する必要がありますか?

+0

'list.forEach(callback、this);はどのコンテキストに表示されますか?これを知らないと、おそらく 'これが何であるか言うことはできません –

+1

https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array/forEachをご覧ください。 – Gumbo

+0

ありがとう、私はあなたの答えを 'これは文脈です。 – Mellon

答えて

2

thisは、現在のオブジェクトです。メソッドlist.forEach()はオブジェクトコンテキスト内で呼び出されます。

var obj = { 
    a: "foo", 
    b: "bar" 
} 

list.forEach(callback, obj); 
1

forEachは標準のJavaScriptはありませんが、おそらくライブラリの一部であった:あなたは第二引数、一例として、ループにしたいオブジェクトを渡すことで、スニペットを使用することができるはずです。 Dojo Toolkitには、forEachのような構造があります。または、Array()プロトタイプに追加されたメソッドであってもかまいません。

this引数は、コールバック関数のコンテキストを持つオブジェクトの識別子である可能性が最も高いです。つまり、コールバック関数自体がthisをコールする場合、コールバック関数の外側にあるオブジェクトは参照する必要があります。

+3

これはES5の標準となる予定で、既にFirefoxでサポートされています。 – Pointy

+0

@Pointy私はそれを知らなかったし、それを聞いてうれしい! –

+0

[MDCドキュメント](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/array/foreach)は、コンテキストパラメータのデフォルト値がグローバルオブジェクトであることを示しています。私はそれが各配列要素を使用すると思っていただろう。 – Pointy

0

配列には、コレクション内の各要素に適用される単一の値をとる関数をとる配列があります(forEach)。 foreachループを使用しての実用的な例では、WebページのURLパラメータを解析し、以下のとおりである:

var query = location.search.slice(1);  
var result = {}, keyValuePairs = query.split('&'); 

keyValuePairs.forEach(function(keyValuePair) { 
    keyValuePair = keyValuePair.split('='); 
    result[keyValuePair[0]] = keyValuePair[1] || ''; 
}); 

あなたはその後、連想配列としてresultオブジェクトを使用するか、または構造のようにマップし、それから値を取得することができますvar somevalue = result["somekey"]