Создание ссылки на функцию с параметрами-значениями, а не ссылками - PullRequest
3 голосов
/ 16 марта 2010

Я не уверен, как именно описать то, что я хочу. Я хочу определить функцию с параметрами, являющимися локальным ЗНАЧЕНИЕМ, а не ссылкой.

скажем, у меня есть список объектов, которые я хочу создать

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

Теперь я верю в этот пример, независимо от того, на какой div я нажимаю, он выдаст предупреждение «10»; так как это последнее значение переменной i;

Есть ли способ / как создать функцию с параметрами, являющимися значением, которое они имеют в то время, когда я указываю функцию ... если это имеет смысл.

Ответы [ 2 ]

5 голосов
/ 16 марта 2010

Вам нужно создать функцию внутри другой функции.

Например:

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);
}
0 голосов
/ 16 марта 2010

Вы можете использовать анонимную функцию:

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