创建具有价值的参数没有引用函数引用
-
20-09-2019 - |
题
我不知道到底该怎么形容我想要的东西。我想定义与参数是一个局部值不是一个引用的函数。
说我有对象的名单,我想创建
for(i = 0; i < 10; i++){
var div = document.createElement("div");
div.onclick = function(){alert(i);};
document.appendChild(div);
}
现在我相信,在这个例子中,无论我点击了什么格,它会提醒“10”;因为这是变量i的最后值;
有什么办法/我该如何创建一个参数是他们当时我指定的功能......如果让任何意义的值的函数。
解决方案
您需要创建另一个函数内部的功能。
例如:
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);
}
其他提示
您可以使用匿名函数:
for(i = 0; i < 10; i++){
(function(i){
var div = document.createElement("div");
div.onclick = function(){alert(i);};
document.appendChild(div);
})(i)
}
不隶属于 StackOverflow