2011-04-19 129 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"]