Можно ли передавать функции стрелок в качестве параметров repeat ()? - PullRequest
0 голосов
/ 24 июня 2018

При поиске функций стрелок я наткнулся на этот пример

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

1-й, метод повтора из MDN , кажется, принимает только один параметр (count).

2-й, функции со стрелками должны быть написаны так: i = () => {}, а не i => {}

Это устаревший фрагмент, который все равно не работает, или я должен интерпретировать его по-другому?

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Метод repeat, упомянутый в статье, - это не String.prototype.repeat, а отдельная функция, определенная в самой статье - это не встроенная функция:

Но что, если мы хотимсделать что-то кроме записи чисел?Поскольку «делать что-то» можно представить как функцию, а функции - просто значения, мы можем передать наше действие как значение функции.

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

Синтаксис, который вы упоминаете

Функции стрелок должны быть написаны так: i = () => {}, а не i =>{}

имеет значение «истина», только если рассматриваемая функция стрелки предназначена для приема в точности нулевых параметров.Функция стрелки с одним параметром может исключать скобки из списка параметров.(Для двух или более параметров снова нужны скобки)

Упомянутый вами фрагмент действительно работает нормально:

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);
0 голосов
/ 24 июня 2018

Похоже, собственная функция 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"]
...