如何将回调作为参数传递给另一个函数
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");
);
【讨论】:
以上是关于如何将回调作为参数传递给另一个函数的主要内容,如果未能解决你的问题,请参考以下文章