【问题标题】:Javascript "forEach" loop questionJavascript“forEach”循环问题
【发布时间】:2011-08-08 17:06:34
【问题描述】:

我在某处看到了代码 sn-p:

list.forEach(callback, this);

我理解 'forEach' 循环,除了这里使用的 'this' 关键字,'this' 是什么意思?

如果我将list.forEach(callback) 转换为正常的for循环,我认为是:

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

但是 forEach(callback, this) 中的 'this' 是什么意思?使用this,如果我将其转换为正常的for循环,需要添加什么?

【问题讨论】:

标签: javascript javascript-framework


【解决方案1】:

this在执行回调时作为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

【讨论】:

  • 但是 forEach 中的“this”是什么意思
  • @Mellon this 只是您上下文中的一个对象。这是可选的。
【解决方案2】:

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

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

list.forEach(callback, obj);

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 它将成为 ES5 的标准,并且已经被 Firefox 支持。
    • @Pointy 我不知道,我很高兴听到它!
    • MDC documentation 表示 context 参数的默认值是全局对象,我觉得有点奇怪;我原以为它会使用每个数组元素。
    【解决方案4】:

    数组上有一个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"] 从中获取值

    【讨论】:

      猜你喜欢
      • 2021-02-20
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多