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

IT技术 javascript ajax callback call
2021-03-15 05:28:31

我是 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);
}
6个回答

对。函数引用就像任何其他对象引用一样,您可以将它们传递给您的心。

这是一个更具体的例子:

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!"

您还可以传递以下参数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"

此外,可以简单为:

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

如果你用谷歌搜索,javascript callback function example你会更好地理解 JavaScript 中的回调函数

这是如何执行回调函数:

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

function callFunction(func) {
    func();
}

callFunction(f);

是的,当然,函数是对象,可以传递,但当然你必须声明它:

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);
}

有趣的是,您的回调函数还可以访问您可能在 firstFunction() 中声明的每个变量(javascript 中的变量具有局部作用域)。

示例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
@shenkwen 细箭头 -> 是 CoffeeScript 语法,而不是 JavaScript,仅表示编译为 JavaScript 时的普通 JavaScript 函数。JavaScript 有一个类似的箭头函数w3schools.com/Js/js_arrow_function.asp
2021-04-17 05:28:31
-> 只是一个正常的功能。 var test = function(str, callback) { ajax call }
2021-05-01 05:28:31
->在 javascript什么意思?@nothing-special-here
2021-05-10 05:28:31