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.
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);
}
You could use an anonymous function:
for(i = 0; i < 10; i++){
(function(i){
var div = document.createElement("div");
div.onclick = function(){alert(i);};
document.appendChild(div);
})(i)
}
精彩评论