如何将回调函数作为参数传递给另一个函数

我是 Ajax 和回调函数的新手,如果我把概念弄错了,请原谅我。

问题: 是否可以将 回调函数作为参数发送给将执行回调的另一个函数?

function firstFunction(){
//some code


//a callback function is written for $.post() to execute
secondFunction("var1","var2",callbackfunction);
}


function secondFunction(var1, var2, callbackfunction) {
params={}
if (event != null) params = event + '&' + $(form).serialize();


// $.post() will execute the callback function
$.post(form.action,params, callbackfunction);
}
139441 次浏览

Yup. Function references are just like any other object reference, you can pass them around to your heart's content.

Here's a more concrete example:

function foo() {
console.log("Hello from foo!");
}


function caller(f) {
// Call the given function
f();
}


function indirectCaller(f) {
// Call `caller`, who will in turn call `f`
caller(f);
}


// Do it
indirectCaller(foo); // logs "Hello from foo!"

You can also pass in arguments for foo:

function foo(a, b) {
console.log(a + " + " + b + " = " + (a + b));
}


function caller(f, v1, v2) {
// Call the given function
f(v1, v2);
}


function indirectCaller(f, v1, v2) {
// Call `caller`, who will in turn call `f`
caller(f, v1, v2);
}


// Do it
indirectCaller(foo, 1, 2); // logs "1 + 2 = 3"

Yes of course, function are objects and can be passed, but of course you must declare it:

function firstFunction(){
//some code
var callbackfunction = function(data){
//do something with the data returned from the ajax request
}
//a callback function is written for $.post() to execute
secondFunction("var1","var2",callbackfunction);
}

an interesting thing is that your callback function has also access to every variable you might have declared inside firstFunction() (variables in javascript have local scope).

If you google for javascript callback function example you will get Getting a better understanding of callback functions in JavaScript

This is how to do a callback function:

function f() {
alert('f was called!');
}


function callFunction(func) {
func();
}


callFunction(f);

Also, could be simple as:

if( typeof foo == "function" )
foo();

Example for CoffeeScript:

test = (str, callback) ->
data = "Input values"
$.ajax
type: "post"
url: "http://www.mydomain.com/ajaxscript"
data: data
success: callback


test (data, textStatus, xhr) ->
alert data + "\t" + textStatus

You can use JavaScript CallBak like this:

var a;


function function1(callback) {
console.log("First comeplete");
a = "Some value";
callback();
}
function function2(){
console.log("Second comeplete:", a);
}




function1(function2);

Or Java Script Promise:

let promise = new Promise(function(resolve, reject) {
// do function1 job
let a = "Your assign value"
resolve(a);
});


promise.then(


function(a) {
// do function2 job with function1 return value;
console.log("Second comeplete:", a);
},
function(error) {
console.log("Error found");
});