Javascript 向动态列表中的匿名函数传递相同的参数值
我正在一个对象数组中动态地构建一个Javascript 向动态列表中的匿名函数传递相同的参数值,javascript,Javascript,我正在一个对象数组中动态地构建一个,其中每个列表项在单击链接时调用一个函数。但是,函数仅从对象数组中的最后一项传递参数。这是我的密码 var list = document.createElement("ul"); var object; for (var i = 0; i < myObjects.length; i++) { object = myObjects[i]; listItem = document.createElement("li"); imag
,其中每个列表项在单击链接时调用一个函数。但是,函数仅从对象数组中的最后一项传递参数。这是我的密码
var list = document.createElement("ul");
var object;
for (var i = 0; i < myObjects.length; i++)
{
object = myObjects[i];
listItem = document.createElement("li");
image = document.createElement("img");
image.setAttribute("src", object.image_url)
listItem.appendChild(image);
listItem.appendChild(document.createTextNode(object.title));
link.setAttribute("href", "#");
link.addEventListener("click", function(){someFunction(object.id);}, false);
link.appendChild(document.createTextNode("Click Me!"));
listItem.appendChild(link);
list.appendChild(listItem);
}
element.appendChild(list);
var list=document.createElement(“ul”);
var对象;
对于(var i=0;i
所有变量都在同一个函数中声明,因此不使用全局变量。在有人建议之前,我不是在使用jQuery,因为在我开始使用任何库之前,我正试图了解javascript的基本知识
提前感谢您的帮助
先生B.由于作用域的工作方式,匿名函数引用的是变量,而不是它的值。稍后更改该变量时,更改将反映在anon函数中 也许使用闭包技巧可以奏效 改变
link.addEventListener("click", function(){someFunction(object.id);}, false);
到
如果我没有弄错的话,那应该创建一个新变量,它的值不会受到
for
循环中对象的后续更改的影响。啊,这是一个经典的闭包问题
您需要将object.id
传递给包装器函数,如下所示:
(function(id) {
link.addEventListener("click", function(){someFunction(id);}, false);
})(object.id);
天才,非常感谢。我知道这和结束有些关系,但我不能完全理解,现在我明白了。出于兴趣,为什么我需要将外部函数括在括号中?我不确定是否需要将外部函数括在括号中,但结尾(…(object);
)处的括号是必需的。为了安全起见,我只想包装整个函数,因为IE的旧版本因为我以前没有包装东西而向我抛出了奇怪的错误。
(function(id) {
link.addEventListener("click", function(){someFunction(id);}, false);
})(object.id);