第一次代码
<body>
<div class="div_area" id="1">1</div>
<div class="div_area" id="2">2</div>
<div class="div_area" id="3">3</div>
<div class="div_area" id="4">4</div>
<div class="div_area" id="5">5</div>
<script>
var div=document.getElementsByClassName("div_area");
for(var i=0;i<div.length;i++){
div[i].onclick=function(){
alert(div[i].id);
}
}
</script>
</body>
这段代码无法实现点击div输出div的id,因为i的值时5,但是我不明白的是为什么i的值是5,这是因为js没有块级作用域导致的还是闭包(看起来不是闭包啊,闭包最常见创建方式的不是函数内嵌函数吗,这里只有一个函数啊)
于是我把代码修改了以后为什么就又可以了?
第二次代码:
alert(this.id);
接着我又把js代码改成了这样,创造了一个闭包,结果i的值也是5,所以DOM找不到,我想问造成i=5的原因和第一次的时候是否时一样的?
第三次代码:
<script>
var div=document.getElementsByClassName("div_area");
function add(){
for(var i=0;i<div.length;i++){
div[i].onclick=function(){
alert(div[i].id);
}
}
}
add();
</script>
本质上是一样的。
在执行
alert(div[i].id);
的时候,for
循环已经完成,i
的值已经变成5了。而this
绑定的始终是被点击的对象。