闭包的使用 — 点击列表项输出项目索引

<ul id="list">
    <li>序号1</li>
    <li>序号2</li>
    <li>序号3</li>
    <li>序号4</li>
    <li>序号5</li>
    <li>序号6</li>
    <li>序号7</li>
    <li>序号8</li>
    <li>序号9</li>
    <li>序号10</li>
</ul>
var list = document.getElementsByTagName('li');
var listLen = list.length;

// 错误写法
for(var i=0;i<listLen;i++) {
  list[i].onclick = function () {
    // 每次输出都是10
    console.log(i);
  }
}

// 使用闭包一
for(var i=0;i<listLen;i++) {
  function msg(n){
    list[n].onclick = function () {
      console.log(n+1);
    }
  }
  msg(i);
}
msg = null;

// 使用闭包二
for(var i=0;i<listLen;i++) {
  (function msg(n) {
    list[n].onclick = function () {
      console.log(n+1);
    }
  })(i);
}
msg = null;

// 非闭包,使用属性进行保存
for(var i=0;i<listLen;i++) {
  list[i].i = i;
  list[i].onclick = function () {
    // 不能写成list[i].i
    console.log(this.i+1);
  }
}

$(function () {
  var li = $('li');
  // jquery写法
  li.click(function () {
    console.log($(this).index()+1);
  });
});
原文地址:https://www.cnblogs.com/wx1993/p/5903083.html