我不知道到底该怎么形容我想要的东西。我想定义与参数是一个局部值不是一个引用的函数。

说我有对象的名单,我想创建

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)
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top