2010-11-19 5 views
0

Я знаю, что это может быть довольно легкое базовое знание для вас, здесь мне нужно попросить вашу помощь, чтобы увидеть, есть ли «дыра» для улучшения. Пожалуйста, проверьте приведенный ниже код, могу ли я установить «ответ» как параметр обратного вызова, но не callSvc? вместо этого «сложного» способа?Может ли обратный вызов определить параметры?

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

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

Спасибо ..

Update

Может быть, это достаточно хорошо?

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

Вы говорите, что хотите, чтобы вы могли самостоятельно вызвать callback без первого вызова 'callSvc'? –

+0

@Marcus правый .. подобный закрытие .. – Elaine

ответ

1

Не должно быть ничего сложного в отношении closures в javascript. Это языковая функция.

Вы можете избежать оберточную функцию callSvc, а также, и прыгать прямо в это:

функция
var response = "I'm a response" 

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

обратного вызова может «видеть» ответ, как если бы вы передали его в качестве параметра, так как он образует замыкание.

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

Я могу выразить с плохим образцом. Мне нужна обертка с параметром-обратным вызовом. – Elaine

1

Eh? Весь этот код выглядит эквивалентно

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

Таким образом, вы можете обойти все методы. Вы можете также объявить анонимную функцию и вызвать его немедленно, если это то, что вы хотите сделать:

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

Или, наконец, если вам нужно передать параметры обратного вызова, который не за исключением любого, затем завернуть его в анонимный Funciton

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

Вторая строка кода выглядит как псевдокод :) – Elaine

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

Смежные вопросы