@Ulian4596

Как работает данный код обработчика?

Распишите пожалуйста подробно как он работает. Я не понимаю от куда там берется функция handler();

function ask(question, ...handlers) {
    let isYes = confirm(question);
    alert(isYes)
    for(let handler of handlers) {
      if (handler.length == 0) {
        if (isYes) handler();
      } else {
        handler(isYes);
      }
    }
  
  }
  
  ask("Вопрос?", () => alert('Вы ответили да'), result => alert(result));
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ответы на вопрос 2
WblCHA
@WblCHA
function ask(question, ...handlers) {
https://www.samanthaming.com/tidbits/20-destructur...

let isYes = confirm(question);
alert(isYes)

Объявление переменной и вызов функций.

for(let handler of handlers) {
https://developer.mozilla.org/ru/docs/Web/JavaScri...

if (handler.length == 0) {
        if (isYes) handler();
      } else {
        handler(isYes);
      }

Бесполезная проверка. Если функция не принимает аргументы, то никакой ошибки от передачи ей аргумента не будет.

ask("Вопрос?", () => alert('Вы ответили да'), result => alert(result));

Вызов функции с объявлением калбеков внутри.
https://learn.javascript.ru/callbacks
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
См. «Остаточные параметры» (так перевели rest parameters)

function ask(question, ...handlers) {}

ask("Как жизнь?",  function(){}, 1, 22, "zzz");
// в функцию ask попадёт:
// question = "Как жизнь?";
// handlers = [
//   function(){},
//   1,
//   22,
//   "zzz"
// ];
Аргументы после первого все попадают в массив handlers.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы