JQuery обратный вызов - PullRequest
       3

JQuery обратный вызов

3 голосов
/ 25 апреля 2011

привет, может кто-нибудь объяснить мне концепцию обратного вызова jquery вроде застрял на этом простом коде

$(document).ready(function(){
    bar('',function(){
        foo();
    });         
});

function foo()
{
    alert('foo');
}

function bar()
{
    alert('bar');
}

, чтобы сначала выполнялось foo(), а затем bar(), но с приведенным выше кодом выполняется только foo() и bar не выполняется.

вот ссылка jsfiddle

1 Ответ

8 голосов
/ 25 апреля 2011

Функции являются первоклассными членами в JavaScript и, как таковые, могут присваиваться переменным и передаваться в качестве аргументов другим функциям. Идея функции обратного вызова заключается в том, что один (или несколько) параметров, которые получает функция, является ссылкой на функцию, которая может быть вызвана при определенных условиях. В вашем случае вы вызываете bar с двумя аргументами, но никогда не делаете ничего с этими параметрами в bar. JavaScript не вызывает функции автоматически, вы, как программист, должны это делать.

Это, вероятно, то, что вы хотите:

$(document).ready(function(){
    bar('',function(){ //this anonymous function maps to the parameter b in bar(a,b)
        foo(); //missing ; can lead to hard to track errors!
    });         
});


function foo()
{
    alert('foo');
}

//accept two parameters
// in this example code, given the call to bar() above, a will map to '' and b to the anonymous function that calls foo()
function bar(a, b) 
{
    alert('bar');
    if(typeof b === 'function'){ //check if b is a function
        b(); //invoke
    }
}

Редактировать

@ Предложение Джареда определенно имеет больше смысла - изменено if(b) на if(typeof b === 'function'){ перед вызовом b

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...