标准浏览器使用的是标记回收,旧的IE使用的是引用回收,如果两个变量相互引用,这两个变量就一直不会被回收
无法得到序号
var aP = document.getElementsByTagName("P"); for( var i=0;i<aP.length;i++){ aP[i].onclick = function(){ console.log(i);//无法得到序号,无论点哪个得到的都是循环结束后的值--4 } }使用闭包
var aP = document.getElementsByTagName("P"); for( var i=0;i<aP.length;i++){//a (function(i){//c aP[i].onclick = function(){//d console.log(i);//e }; })(i);//b } //ab处的i是同一个i cde处的i是同一个i //ES6使用let,作用与闭包相同 var aP = document.getElementsByTagName("P"); for( let i=0;i<aP.length;i++){ aP[i].onclick = function(){ console.log(i); } }