Estou tentando passar algum parâmetro para uma função usada como retorno de chamada, como posso fazer isso?
function tryMe (param1, param2) {
alert (param1 + " and " + param2);
}
function callbackTester (callback, param1, param2) {
callback (param1, param2);
}
callbackTester (tryMe, "hello", "goodbye");
Respostas:
Se você quiser algo um pouco mais geral, use a variável argumentos da seguinte maneira:
Mas, caso contrário, seu exemplo funciona bem (argumentos [0] podem ser usados no lugar do retorno de chamada no testador)
fonte
callback.apply(arguments)
o corpo da funçãocallbackTester
for extensível além do cenário de dois argumentos.Isso também funcionaria:
Outro cenário:
fonte
if (typeof window[callback] == 'function') window[callback].call(this);
Sua pergunta não está clara. Se você está perguntando como fazer isso de uma maneira mais simples, consulte o método .bind () da 5ª edição do ECMAScript , que é membro do Function.prototype . Usando-o, você pode fazer algo assim:
Você também pode usar o código a seguir, que adiciona o método se ele não estiver disponível no navegador atual:
Exemplo
bind () - PrototypeJS Documentation
fonte
Array.prototype.slice.call(arguments)
earguments.slice()
?f = function(arg1,arg2){alert(arg1+arg2);}.bind(this,"abc");
f("def") // Gives "abcdef"
Quando você tem um retorno de chamada que será chamado por algo diferente do seu código com um número específico de parâmetros e deseja passar parâmetros adicionais, pode passar uma função de wrapper como o retorno de chamada e dentro do wrapper passar os parâmetros adicionais.
fonte
Se você não tiver certeza de quantos parâmetros serão passados para as funções de retorno de chamada, use a
apply
funçãofonte
Agrupe as funções 'filho' que estão sendo passadas como / com argumentos nos wrappers de função para impedir que sejam avaliados quando a função 'pai' for chamada.
fonte
Código de uma pergunta com qualquer número de parâmetros e um contexto de retorno de chamada:
fonte
Use a função ao curry como neste exemplo simples.
fonte
Uma nova versão para o cenário em que o retorno de chamada será chamado por alguma outra função, não pelo seu próprio código, e você deseja adicionar parâmetros adicionais.
Por exemplo, vamos fingir que você tem muitas chamadas aninhadas com retornos de sucesso e erro. Usarei promessas angulares para este exemplo, mas qualquer código javascript com retornos de chamada seria o mesmo para esse propósito.
Agora você pode organizar seu código organizando uma função para registrar erros, mantendo a origem do erro para fins de depuração. É assim que você deve refatorar seu código:
A função de chamada ainda adicionará o parâmetro de erro após os parâmetros da função de retorno de chamada.
fonte
Eu estava procurando a mesma coisa e acabei com a solução e aqui está um exemplo simples, se alguém quiser passar por isso.
Também postado na outra pergunta aqui
fonte
Deixe-me dar um exemplo muito simples de estilo do Node.js. usando um retorno de chamada:
e o HTML que renderizará o resultado:
Você pode brincar com ele aqui: https://jsfiddle.net/q8gnvcts/ - por exemplo, tente passar a string em vez do número: myTest ('alguma string', 6, função (err, resultado) .. e veja o resultado.
Espero que este exemplo ajude, porque representa a idéia muito básica das funções de retorno de chamada.
fonte
leia mais sobre a sintaxe de propagação
fonte
fonte