Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a function reference that has value parameters not references

I'm not sure exactly how to describe what I want. I want to define a function with the parameters being a local VALUE not a reference.

say I have list of objects I want to create

for(i = 0; i < 10; i++){
  var div = document.createElement("div");
  div.onclick = function(){alert(i);};
  document.appendChild(div);
}

Now I believe in this example no matter what div I click on, it would alert "10"; as that is the last value of the variable i;

Is there a way/how do I create a function with the parameters being the value they are at the time I specify the function... if that makes any sense.

like image 244
Sheldon Ross Avatar asked Sep 16 '26 13:09

Sheldon Ross


1 Answers

You need to create the function inside another function.

For example:

div.onclick = (function(innerI) {
    return function() { alert(innerI); }
})(i);

This code creates a function that takes a parameter and returns a function that uses the parameter. Since the parameter to the outer function is passed by value, it solves your problem.

It is usually clearer to make the outer function a separate, named function, like this:

function buildClickHandler(i) {
    return function() { alert(i); };
}

for(i = 0; i < 10; i++){
    var div = document.createElement("div");
    div.onclick = buildClickHandler(i);
    document.appendChild(div);
}
like image 103
SLaks Avatar answered Sep 18 '26 01:09

SLaks



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!