我正在尝试理解JS,我对回调模式感到困惑。
function one(){
alert("I'm one!")
}
function total(arg, callback){
setTimeout(function() {alert("I'm "+arg);}, 1000);
callback();
}
total('all', one);
与
function one(){
alert("I'm one!")
}
function total(arg){
setTimeout(function() {alert("I'm "+arg);}, 1000);
one();
}
total('all');
将one()
作为参数传递而不仅仅是从函数中调用它有什么好处?
答案 0 :(得分:3)
如果您知道自己总是打电话给one
,则无需接受它作为输入参数;你可以继续打电话。
接受回调的功能使您可以轻松编写松散耦合的代码。
例如,您在代码示例中将回调传递给setTimeout
。 setTimeout
知道在调用函数之前等待给定的毫秒数,但它不知道要调用哪个函数。
答案 1 :(得分:1)
传入回调函数可以动态地影响程序的流程。此外,您可以将total
的结果作为参数传递给callback
,function one(){
alert("I'm one!")
}
function total(arg, callback){
setTimeout(function() {
if (callback) {
callback();
}
}, 1000);
}
通常用于启用异步编程。
@Entity
答案 2 :(得分:0)
我怀疑你的例子不是为了展示回调是什么。这更有意义吗?
public class Game
{
public int appid { get; set; }
public int playtime_forever { get; set; }
public int? playtime_2weeks { get; set; }
}
public class SteamResponse
{
public int game_count { get; set; }
public List<Game> games { get; set; }
}
public class RootObject
{
public SteamResponse response { get; set; }
}
答案 3 :(得分:0)
回调参数允许您定义自定义交互。它通常用于任何异步操作,以允许状态更改的响应(例如,当操作完成或出错时)。
其中一个例子可能是AJAX调用(此处使用jQuery for simpliciy):
var request = $.ajax({
url: "script.php"
});
// this allows you to specify custom action handling
request.done(one);