回调函数vs从函数内部调用函数

时间:2015-11-21 22:26:21

标签: javascript

我正在尝试理解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()作为参数传递而不仅仅是从函数中调用它有什么好处?

4 个答案:

答案 0 :(得分:3)

如果您知道自己总是打电话给one,则无需接受它作为输入参数;你可以继续打电话。

接受回调的功能使您可以轻松编写松散耦合的代码。

例如,您在代码示例中将回调传递给setTimeoutsetTimeout知道在调用函数之前等待给定的毫秒数,但它不知道要调用哪个函数。

答案 1 :(得分:1)

传入回调函数可以动态地影响程序的流程。此外,您可以将total的结果作为参数传递给callbackfunction 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);