Это соответствует вашему определению обратного вызова? - PullRequest
6 голосов
/ 05 марта 2009

Определение обратного вызова:

Функция, которая устанавливается как свойство внутри Компонента. И обычно вызывается, когда на Компоненте происходит какое-то событие.

Например:

Если вы хотите отобразить диалоговое окно, которое читает «Меня щелкнули» , когда пользователь нажимает на Компонент componentB , вы должны написать метод, сохраненный в виде переменной, которая делает :

var mouseDownCallbackFunction = function() {
    alert("I was clicked!");
};

Далее , вы бы установили эту функцию внутри компонента следующим образом ...

// Set the Component to display the dialog when the 
// user presses the mouse down on it.
componentB.setMouseDownCallback(mouseDownCallbackFunction);

И это приведет к тому, что mouseDownCallbackFunction будет отображать «Я был нажат» в окне предупреждения при нажатии компонента.

Ответы [ 5 ]

3 голосов
/ 05 марта 2009

Технически, в JavaScript это замыкание , поскольку оно может связываться с любыми переменными в области видимости, на которые ссылаются.

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

3 голосов
/ 05 марта 2009

Да, это точное описание обратного вызова ...

2 голосов
/ 05 марта 2009

В C это будет действительный обратный вызов. Однако я не настолько знаком с JavaScript, чтобы сказать, так ли это или нет, потому что я не уверен, как обрабатываются переменные в отношении их областей памяти.

В C / C ++ вы можете объявить пустой указатель:

void aFunction()
{
     do stuff
}

int main()
{
    void* myCallback = &aFunction; 
    componentB.setMouseDownCallback(myCallback);
}

Будет работать.

Однако, несмотря на отсутствие у меня знаний JavaScript, я знаю, что

componentB.setMouseDownCallback(function() {
        alert("I was clicked!");
        };
);

также действует.

РЕДАКТИРОВАТЬ добавил не ко второму предложению: "Я не так знаком"

2 голосов
/ 05 марта 2009

Да, обратный вызов - это функция, которая определена на более высоком уровне, чем она вызывается. Ваш клиентский код создает функцию, а затем передает ее в качестве параметра componentB, чтобы componentB вызывал ее позже.

0 голосов
/ 05 марта 2009

да, это обратный вызов.

...