<body onload="init()">
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
</body>
<script>
var pAry = document.getElementsByTagName('p');
function init(){
for(var i=0;i<pAry.length;i++){
pAry[i].i = i;
pAry[i].onclick =function () {
console.log(pAry[i].i)
};
}
}
</script>
代码倒数第五行 为什么我这样写浏览器会报Cannot read property 'i' of undefined
而换成this之后 就能正常运行
这两者的区别在哪?
pAry[i].onclick =function () {
console.log(pAry[i].i)
};
//引用的i是他父函数init函数的变量i,init里的函数i经过循环后值变成了5,pAry[i]就数组越界了,越界了就是undefined
function 是匿名函数,i在外面,你又没有当参数传进来,当然没定义了
pAry是你查到的Dom数组,不应该pAry[i].i,这里的dom节点上不存在可以"."的i,因为for循环几乎是瞬间完成的,此时变量i已经是5了,下标为5的p节点并不存在,建议不要通过for循环这样绑定点击事件
<body>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
</body>
<script>
var pAry = document.getElementsByTagName('p');
function init() {
for (let i = 0; i < pAry.length; i++) {
pAry[i].onclick = function () {
console.log(i)
};
}
}
init()
</script>