我不确定如何描述我想要的东西。我想定义一个函数,其参数是本地VALUE而不是引用。
说我有我要创建的对象列表
for(i = 0; i < 10; i++){
var div = document.createElement("div");
div.onclick = function(){alert(i);};
document.appendChild(div);
}
现在我相信这个例子,无论我点击什么div,它都会警告“10”;因为那是变量i的最后一个值;
有没有办法/如何创建一个函数,参数是我指定函数时的值...如果这有意义的话。
答案 0 :(得分:5)
您需要在另一个函数中创建函数。
例如:
div.onclick = (function(innerI) {
return function() { alert(innerI); }
})(i);
此代码创建一个函数,该函数接受一个参数并返回一个使用该参数的函数。由于外部函数的参数是按值传递的,因此它可以解决您的问题。
通常更清楚的是将外部函数设置为单独的命名函数,如下所示:
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);
}
答案 1 :(得分:0)
您可以使用匿名函数:
for(i = 0; i < 10; i++){
(function(i){
var div = document.createElement("div");
div.onclick = function(){alert(i);};
document.appendChild(div);
})(i)
}