如何使用.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不是函数
答案 0 :(得分:4)
在现代(ES2015)JavaScript中,您可以使用Array.from()
:
Array.from(arguments).forEach((arg) => {
this.score += arg;
});
您不需要使用数组索引,因为.forEach()
函数将每个数组元素作为第一个参数传递给回调函数。 (它确实将索引作为第二个参数传递,但在这种情况下,您不需要使用它。)
重要的是要注意,如果arguments
对象被传递出一个函数(就像在这里一样),整个函数可能被认为不符合优化条件。这是因为arguments
对象有一些奇怪的属性,这使得优化器很难知道发生了什么,以及对局部变量如何变化做出假设是否安全。如果这是一个问题,那么唯一的选择是将参数复制到一个带有for
循环的简单数组中。