Function that passes arguments dynamically to callback

Asked

Viewed 293 times

1

How to pass arguments in a callback function (usually anonymous function)?

It may get hard to understand, so I’ll give you an example here. I always see this in libraries like jQuery, but I don’t understand how it works in JS "pure".

For example:

// essa é a função que passa um argumento qualquer para dentro de seu callback
function passarArgumento(callback){

}

// função anônima de callback recebe e printa o argumento nos 2 exemplos abaixo
passarAgumento(function(argumento){
      alert(argumento);
})

passarArgumento(function(valor){
      alert(valor);
})

My question is: as the passarArgumento() makes to play the value inside the callback, and still have the variable name, as in the example (argument, value)?

Update

Another example is jQuery’s ajax function

$.ajax({
   success: function(resposta){
     // a função $.ajax jogou a resposta do request aqui. Como isso é feito?
     alert(resposta);
  }
});

1 answer

1


The variable name can be changed as you wish. This is defined when you set the callback. To execute this callback and activate the alert in your case, just invoke the function. That is:

function passarArgumento(callback){
    callback('aqui passas o que a callback deve retornar');
}

Example:

// essa é a função que passa um argumento qualquer para dentro de seu callback
function passarArgumento(callback, tipo) {
  callback('aqui passas o que a callback deve retornar ' + tipo);
}

// função anônima de callback recebe e printa o argumento nos 2 exemplos abaixo
passarArgumento(function(argumento) {
  alert(argumento);
}, 'A')

passarArgumento(function(valor) {
  alert(valor);
}, 'B')

Another way to see the problem:

When we pass a function as an argument, we don’t know when it will be called, nor how many arguments it will receive. Who controls that is the time and way that is invoked.

Example:

function tipoA(callback) {
  callback('vou passar', 'dois argumentos');
}

function tipoB(callback) {
  setTimeout(function() {
    callback('argumento unico, mas atrasado');

  }, 2000);
}

tipoA(function(a, b) {
  console.log(arguments.length, a, b);
})

tipoB(function(a, b) {
  console.log(arguments.length, a, b);
})

  • It wasn’t quite that yet, Sergio. I updated the question. See if you can understand now, please. Thanks!

  • @inovapixel the idea is the same, I added another explanation and example. Take a look.

  • 1

    I got it. Thanks for your help.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.