получение ошибки при передаче некоторых параметров - PullRequest
3 голосов
/ 04 августа 2020

Я новичок, так что это может быть не очень умный вопрос .. Если у меня есть эта функция

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

, если я реализую ее таким образом repeat (3,console.log), она работает. почему я получаю сообщение об ошибке, если я передаю ему следующие параметры:

let arr = [0]; 
repeat(3,arr.push);

, поскольку action(i) будет заменен, как я думаю, на arr.push(i)

1 Ответ

5 голосов
/ 04 августа 2020

Метод Array.prototype.push не является функцией и не может использоваться в качестве обратного вызова, если он не привязан. Ожидается, что в качестве области действия вызова будет передан this.

См.: Почему я не могу использовать Array.prototype.join.call в качестве обратного вызова Promise ?

У вас есть два варианта:

  • repeat(3, arr.push.bind(arr)); (обратный вызов связанного метода)
  • repeat(3, v => arr.push(v)); (обратный вызов в лямбда-стиле )

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

repeat(3, console.log);

console.log

let arr = [0];
repeat(3, arr.push.bind(arr));
console.log(arr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...