箭头函数可以作为repeat()的参数传递吗?

时间:2018-06-24 09:47:08

标签: javascript repeat arrow-functions

在搜索箭头功能时,我遇到了这个example

let labels = [];
repeat(5, i => {
  labels.push(`Unit ${i + 1}`);
});
console.log(labels);
// → ["Unit 1", "Unit 2", "Unit 3", "Unit 4", "Unit 5"]

第一个MDN重复方法似乎只接受一个参数(count)

2,箭头函数应这样编写:i = () => {},而不是i => {}

这是一个过时的代码段,还是不管用还是我应该用另一种方式解释它?

2 个答案:

答案 0 :(得分:1)

本文提到的repeat方法不是String.prototype.repeat,而是文章本身定义的独立函数-它不是内置函数:

  

但是,如果我们要执行除记录数字以外的其他操作怎么办?由于“做某事”可以表示为一个函数,而函数只是值,因此我们可以将操作作为一个函数值传递。

function repeat(n, action) {
  for (let i = 0; i < n; i++) {
    action(i);
  }
}
repeat(3, console.log);

您提到的语法

  

箭头函数应这样写:i =()=> {},而不是i => {}

仅在所讨论的箭头函数旨在接受完全为零的参数时为true。具有一个参数可以的箭头函数的参数列表中省略了括号。 (两个或多个参数需要再次加上括号)

您提到的代码片段确实可以正常工作:

function repeat(n, action) {
  for (let i = 0; i < n; i++) {
    action(i);
  }
}

let labels = [];
repeat(5, i => {
  labels.push(`Unit ${i + 1}`);
});
console.log(labels);

答案 1 :(得分:0)

它看起来像是repeat的自身功能,而不是String之一。

在这种情况下,您可以将具有所需参数签名的函数传递给该函数。

const
    repeat = (l, fn) => {
        var i;
        for (i = 0; i < l; i++) fn(i);
    };

let labels = [];

repeat(5, i => labels.push(`Unit ${i + 1}`));

console.log(labels); // → ["Unit 1", "Unit 2", "Unit 3", "Unit 4", "Unit 5"]