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

Posted

技术标签:

【中文标题】如何将回调作为参数传递给另一个函数【英文标题】:How to pass a callback as a parameter into another function 【发布时间】:2011-09-21 21:39:26 【问题描述】:

我是 ajax 和回调函数的新手,如果我的概念完全错误,请原谅我。

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

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

【问题讨论】:

Getting a better understanding of callback functions in javascript的可能重复 【参考方案1】:

是的。函数引用就像任何其他对象引用一样,您可以随心所欲地传递它们。

这是一个更具体的例子:

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"

【讨论】:

【参考方案2】:

另外,可以简单如下:

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

【讨论】:

【参考方案3】:

如果你用谷歌搜索javascript callback function example,你会得到Getting a better understanding of callback functions in JavaScript

这是如何做一个回调函数:

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


function callFunction(func) 
    func();


callFunction(f);

【讨论】:

【参考方案4】:

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

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 中的变量具有本地范围)。

【讨论】:

【参考方案5】:

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

【讨论】:

-> 在 javascript 中是什么意思?@nothing-special-here -> 只是一个普通函数。 var test = function(str, callback) ajax call @shenkwen 细箭头 -> 是 CoffeeScript 语法,而不是 JavaScript,仅表示编译成 JavaScript 时的普通 JavaScript 函数。 JavaScript 也有类似的箭头函数w3schools.com/Js/js_arrow_function.asp【参考方案6】:

你可以像这样使用 JavaScript CallBak:

var a;

function function1(callback) 
 console.log("First comeplete");
 a = "Some value";
 callback();

function function2()
 console.log("Second comeplete:", a);



function1(function2);

或 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");
);

【讨论】:

以上是关于如何将回调作为参数传递给另一个函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有 args 的成员函数作为参数传递给另一个成员函数?

角度拖放-如何将参数传递给onStart回调函数

什么是回调函数

如何通过原始指针将闭包作为参数传递给 C 函数?

将一个函数的所有参数传递给另一个函数

将参数传递给 UIcontrol 回调函数