CallBack функция как функция

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем petypen, 2 авг 2016.

Метки:
  1. petypen

    petypen Нерд

    Коллеги, добрый день.
    Немного запутался. Пытаюсь оформить код, в котором callback функция объявлена как самостоятельная функция:
    Код (Javascript):
    setWatch(buttonClick(e),BTN1);

    // function

    function buttonClick(pSetWatch) {
      console.log('button is press');
    }
    при загрузке программы в STM32F4Discovery получаю ошибку:
    ERROR: Invalid pin
    Uncaught ReferenceError: "buttonClick" is not defined
    at line 1 col 10 setWatch(buttonClick(e),BTN1);

    Я понимаю, что callback функцию можно определить непосредственно в setWatch, но как же тяжело переходить на такой стиль.

    Пробовал передавать callback как строку:
    Код (Javascript):
    setWatch('buttonClick(e)',BTN1);

    // function

    function buttonClick(pSetWatch) {
      console.log('button is press');
    }
    однако, тут проблема с передачей в callback параметра e.
     
  2. Morgan

    Morgan Гик

    Привет!

    в строке
    setWatch(buttonClick(e), BTN1);
    При таком написании функция buttonClick(e) не передается в качестве параметра, а вызывается. В этом случае передается результат выполнения buttonClick(e). Кроме того, buttonClick(e) объявлена ниже по коду, и на момент её использования в setWatch, о buttonClick ещё ничего не известно.

    работать будет, например, вот так:
    Код (Javascript):
    function buttonClick(pSetWatch) {
      console.log('button is press', pSetWatch);
    }

    setWatch(buttonClick, BTN1, {
      repeat: true
    });
     
    petypen и acos нравится это.
  3. petypen

    petypen Нерд

    Стало много понятнее. Спасибо.
     
  4. petypen

    petypen Нерд

    Становится понятно, почему утверждение:
    прочитанное мной на уважаемом learn.javascript.ru не работает. Интерпретатор не вызывает callback функцию, которая указана в параметре. При размещении callback функции после setWatch просто не проходит синтактический контроль.