Javascript“forEach”循环问题

时间:2011-04-19 13:50:20

标签: javascript javascript-framework

我在某处看到了代码片段:

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,如果我将其转换为正常的循环,需要添加什么?

4 个答案:

答案 0 :(得分:3)

执行回调时,

this用作此对象。

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

请参阅:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/foreach

答案 1 :(得分:2)

this是当前对象。方法list.forEach()将在对象上下文中调用。您应该能够通过将要循环的对象作为第二个参数传递来使用该代码段,例如:

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

list.forEach(callback, obj);

答案 2 :(得分:1)

forEach不是标准的javascript,但可能是库的一部分。 Dojo Toolkit有一个forEach构造,或者它可能是添加到Array()原型的方法。

this参数很可能是哪个对象应具有回调函数的上下文的标识符。也就是说,如果回调函数本身调用this,它应该引用回调函数之外的哪个对象。

答案 3 :(得分: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"]

从中获取值