回调是否可以定义参数?

时间:2010-11-19 08:58:41

标签: javascript

我知道这对你来说可能是一个相当简单的基础知识,在这里我需要你的帮助,看看是否有一个“漏洞”可以改善。请检查下面的代码,我可以将'response'设置为callback参数但不能设置callSvc吗?而不是这种'棘手'的方式?

function callSvc(response, callback){
    callback(response);
}

callSvc("I'm a response!",function(param_response){document.write(param_response);});

谢谢..

更新

也许这还不错?

function callSvc(callback) {
    callback("response");
}
callSvc(function(data) {
    document.write(arguments[0]);
});

3 个答案:

答案 0 :(得分:1)

javascript中closures不应该有任何棘手的问题。它们是一种语言功能。

你也可以避免包装callSvc函数,直接跳到这个:

var response = "I'm a response"

var callback = function(){document.write(response);};

回调函数可以“看到”响应,就像将它作为参数传递一样,因为它形成了一个闭包。

callback();  //I'm a response

答案 1 :(得分:1)

嗯?所有代码看起来都等同于

document.write("I'm a response!");

所以你可以绕过所有的方法。您也可以声明一个匿名函数并立即调用它,如果这是您想要做的:

(function(param_response){document.write(param_response);})("I'm a response!");

或者最后,如果你需要将参数传递给一个除了any之外的回调,那么将它包装在一个匿名函数中

func_that_takes_callback(function(){the_real_callback(arg);});

答案 2 :(得分:1)

而不是匿名定义你的回调,而不是事先定义它:

function callSvc(response, callback){
    callback(response);
}

function cb(param_response) {
    document.write(param_response);
}

然后,您可以在调用callSvc或单独调用时使用它:

callSvc("I'm a response!", cb);

cb("I'm a response!");