循环中创建函数的问题

//糟糕的例子

var add_handlers = function(nodes){

  var i;

  for(i = 0; i < nodes.length; i++){

    nodes[i].onclick = function (e){

      alert(i);

    };

  }

};

//结束糟糕的例子

//改进的例子

var add_handlers = function(nodes){

  var helper = function(i){

    return function(e){

      alert(i);

    }

  };

  var i;

  for(i=0; i< nodes.length; i+=1){

    nodes[i].onclick = helper(i);

  } 

};

糟糕的例子问题在于事件处理器函数绑定了变量i本身,而不是函数在构造时的变量i的值。

避免在循环中创建函数。

你可能感兴趣的:(函数)