2011-04-19 171 views
2

我看到某處的代碼片段:的Javascript「foreach」循環問題

list.forEach(callback, this); 

我明白了「forEach」除「this」關鍵字循環這裏使用,什麼是「this」是什麼意思?

如果我轉換list.forEach(callback)正常的循環,我認爲是:

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

但什麼是 'this' 是指在forEach(callback, this)this,如果我將它轉換爲正常循環,需要添加什麼?

+0

'list.forEach(callback,this);'出現在什麼上下文中?如果不知道這一點,我們不可能說這是什麼,這是 – 2011-04-19 13:52:23

+1

看看https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach – Gumbo 2011-04-19 13:53:05

+0

好的,謝謝你,我得到了你的答案,'這'是上下文。 – Mellon 2011-04-19 13:55:39

回答

2

this是當前對象。方法list.forEach()將在對象上下文中調用。您應該能夠通過傳遞你想要的對象循環作爲第二個參數,例如使用的片段:

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

list.forEach(callback, obj); 
1

forEach不是標準的JavaScript,但可能是一個庫的一部分。 Dojo Toolkit具有這樣的構造,或者它可以是添加到Array()原型的方法。

this參數很可能是標識哪個對象應具有回調函數的上下文。也就是說,如果回調函數本身調用this,它應該引用回調函數外的哪個對象。

+3

它將成爲ES5的標準,並且它已經被Firefox支持。 – Pointy 2011-04-19 13:55:34

+0

@Pointy我不知道,我很高興聽到它! – 2011-04-19 13:56:05

+0

[MDC文檔](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/foreach)表示context參數的默認值是全局對象,我覺得有點令人驚訝;我會認爲它會使用每個數組元素。 – Pointy 2011-04-19 13:58:28

0

數組上有一個forEach,它接受一個函數,該函數採用應用於集合中每個元素的單個值。使用foreach循環的一個實際例子是解析網頁的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"]