2010-11-19 89 views
0

我知道这对你来说可能是一个相当简单的基础知识,在这里我需要你的帮助,看看是否有一个'漏洞'来改善。请检查下面的代码,我可以设置'回应'作为回调参数,但不是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]); 
}); 
+2

你是说你希望能够自己调用'callback'而不必先调用'callSvc'? – 2010-11-19 09:03:24

+0

@马库斯右..就像关闭.. – Elaine 2010-11-19 09:09:09

回答

1

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

可以避开包装callSvc功能,以及,直接跳转到这一点:

var response = "I'm a response" 

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

回调函数可以“看到”响应,如果你通过它作为一个参数,因为它形成了一个闭合。

callback(); //I'm a response 
+0

我可能表示一个不好的示例。我需要一个带有参数定义回调的包装。 – Elaine 2010-11-19 09:17:27

1

Eh?所有的代码看起来相当于

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

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

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

或者最后,如果你需要将参数传递到不除外任何回调,然后再包上匿名功能可按

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

第二行代码看起来像一个伪代码:) – Elaine 2010-11-19 09:24:00

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!"); 
+0

谢谢,但这不是我所期望的。 – Elaine 2010-11-19 09:25:05

相关问题