创建具有值参数而不是引用的函数引用

She*_*oss 3 javascript closures function parameter-passing

我不确定如何描述我想要的东西.我想定义一个函数,其参数是本地VALUE而不是引用.

说我有我想要创建的对象列表

for(i = 0; i < 10; i++){
  var div = document.createElement("div");
  div.onclick = function(){alert(i);};
  document.appendChild(div);
}
Run Code Online (Sandbox Code Playgroud)

现在我相信这个例子,无论我点击什么div,它都会提醒"10"; 因为那是变量i的最后一个值;

有没有办法/如何创建一个函数,参数是我在指定函数时的值...如果这有意义的话.

SLa*_*aks 5

您需要在另一个函数内创建函数.

例如:

div.onclick = (function(innerI) {
    return function() { alert(innerI); }
})(i);
Run Code Online (Sandbox Code Playgroud)

此代码创建一个函数,该函数接受一个参数并返回一个使用该参数的函数.由于外部函数的参数是按值传递的,因此它可以解决您的问题.

将外部函数作为单独的命名函数通常更清晰,如下所示:

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);
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

350 次

最近记录:

15 年,7 月 前