Функции являются первоклассными членами в 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