Если вы скажете:
nodes[i].onclick = function(){ alert(i) };
Функция не будет иметь свою собственную копию i
, поскольку i
не объявлено в области действия функции.
Чтобы помочь вам увидеть это лучше, я изменил ваш код выше:
var add_the_handlers = function (nodes) {
var helper = function(t) {
// t is in the scope of "helper"
return function(e){
// e is in the scope of this anonymous function
// and is not used
alert(t);
};
};
// Variables declared here are in the scope of "add_the_handlers"
var i;
for (i = 0; i < nodes.length; i += 1) {
nodes[i].onclick = helper(i);
}
};
В «реальном мире» вы часто будете видеть код, подобный приведенному выше, сокращенный, чтобы он выглядел так: