JavaScript: Is it possible to pass a variable into a callback function that is assigned to a variable?

Viewed 34904

A lot of people say that this is asked too much in the comments, which made me hesitant to ask this, but I still have not found a solution in their answers, mostly because (1) they are typically using jQuery and (2) the questions usually contain technicalities I do not understand.

I have a function with a variable inside. The variable is assigned a function. I'm sure this concept is not exclusive to AJAX, but that is the context I am using it in, if it makes a difference.

function iClick(this)
{
    var foo = "I would like to pass this.";

    ajax.onreadystatechange = function (foo) { alert(foo); }
}

I want to pass a variable into the function. However, since there is no original function declaration, how do I specify parameters? Can I even do that?

5 Answers

As @John Hartsock referred, the answer that everyone should really remember is this

var c="hello";

(function(b){
   alert(b) 
})(c);

And that's very important for example in a for loop when there is some async function inside it, because otherwise you don't get the correct item.

Tell me, what comes out from here?

for (var i=0; i<5; i++){
  setTimeout(function(){ 
    console.log(i); 
    }, 1000);
}

Exactly: all 5, because when all the timers are triggered after 1 second, variable i is already at the value 5.

But if you use a self-invoked anonymous function (SIAF) like this

for (var i=0; i<5; i++){
  (function (j){
    setTimeout(function(){ 
      console.log(j); 
      }, 1000);
   })(i);
}

it does work, since every time the function is evoked, it runs another instance of the function and as any function, it has its own local variables. I do not merely define the function, I also run it right away (through the (); at the end), but then internally a new instance of the function will be created with different internal local variables, as I parse to the function a different variable every time I run it.

Related