Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向动态列表中的匿名函数传递相同的参数值_Javascript - Fatal编程技术网

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);