Функция, вызываемая с другой функцией в качестве параметра, не может полностью понять ее - PullRequest
0 голосов
/ 01 марта 2019

У меня есть простое объявление функции:

repeat = (n, action) => {
     for(i=1; i<=n; ++i) {
          action(i);
     }
}

Позже на странице я вызываю функцию повтора, но использую другую функцию в качестве параметра 'действия':

let test_array = [];
     repeat(5, p => {
          test_array.push(p);
     })

Этокод должен хранить 1,2,3,4,5 в массиве «test_array», но я не могу понять, что именно делает «p» в этой ситуации.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

В вашем фрагменте кода p более или менее является функцией обратного вызова.Обратный вызов - это функция, которая должна выполняться после завершения выполнения другой функции.

В вашем случае вы создаете другую функцию, в которой используется ваш p.

Вы можете увидеть это, просто войдя в свой p var.p - это функция (обратный вызов) в вашем коде, поэтому вы должны увидеть, что функция выводится.

repeat = (n, action) => {
     console.log("Action: ", action);
     for(i=1; i<=n; ++i) {
          action(i);
     }
}


let test_array = [];
repeat(5, p => {
    test_array.push(p);
})

Ваш код совпадает с:

repeat = (n, action) => {
     for(i=1; i<=n; ++i) {
     console.log(action);
          action(i);
     }
}


let test_array = [];
repeat(5, function(i) {
    test_array.push(i);
})
     
     
console.log(test_array);

См .: https://developer.mozilla.org/en-US/docs/Glossary/Callback_function

0 голосов
/ 01 марта 2019

p используется в качестве параметра для анонимной функции, которую вы предоставляете для repeat().(Ознакомьтесь с обзором функций MDN в JavaScript )

Вы можете так же легко назначить неанонимную (то есть именованную) функцию для вызова repeat, как функции первого класса в JavaScript

function foo(i) {
  test_array.push(i);
}

repeat(5, foo); // => test_array now holds [1, 2, 3, 4, 5] just like before
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...