替代for循环

时间:2016-01-16 21:39:35

标签: javascript arrays node.js oop

如何使用.forEach而不是for循环?

'use strict';

var score = (function(){
        function updateScore() {
            for(var i = 0; i < arguments.length; i++) {
                this.score += arguments[i];
            }// I want to use .forEach here instead of for loop.
            return this.score;
        }

        return {
            update: updateScore
        }
})();

var soccer = {
    name: 'Soccer',
    score: 0
}

score.update.apply(soccer, [1,2,3])

console.log(soccer.score)

这将记录6。

我试过这个

function updateScore() {
  arguments.forEach((args, i) => {
    this.score += args[i];
  };
  return this.score;
}; 

错误日志:arguments.forEach不是函数

1 个答案:

答案 0 :(得分:4)

在现代(ES2015)JavaScript中,您可以使用Array.from()

Array.from(arguments).forEach((arg) => {
  this.score += arg;
});

您不需要使用数组索引,因为.forEach()函数将每个数组元素作为第一个参数传递给回调函数。 (它确实将索引作为第二个参数传递,但在这种情况下,您不需要使用它。)

重要的是要注意,如果arguments对象被传递出一个函数(就像在这里一样),整个函数可能被认为不符合优化条件。这是因为arguments对象有一些奇怪的属性,这使得优化器很难知道发生了什么,以及对局部变量如何变化做出假设是否安全。如果这是一个问题,那么唯一的选择是将参数复制到一个带有for循环的简单数组中。