我知道这对你来说可能是一个相当简单的基础知识,在这里我需要你的帮助,看看是否有一个“漏洞”可以改善。请检查下面的代码,我可以将'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]);
});
答案 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!");