1.通过封闭空间传递i值,回调函数执行时,注册事件结束了;
js部分
function sss() {
for(var i=1; i < 4; i++) {
// 封闭空间自执行,传递i值到内部
(function bb(data_i) { // data_i是形参
// 获取元素
var b = document.getElementById('button'+data_i);
// DOM二级事件(点击)
b.addEventListener('click',function (){
console.log('button'+data_i)
})
})(i)
}
}
window.onload = sss;
// 这是一个函数,匿名函数;既然是函数,那就在作用域链上具有一个对象,
// 这个函数里面使用到i值,它自然会在作用域上查找;
// 这个匿名函数 --> 外部的函数sss() -->全局对象window
// 匿名函数中找不到i,自然跑到了sss(), ok,在for中找到了,
// 这时注册事件已经结束了,不要以为它会一个一个把i放下来,
// 因为函数作用域之内的变量对作用域内是一直可见的,就是说会保持到最后的状态
// 当匿名函数要使用i的时候,注册事件完了,i已经变成了4,所以都是Button4
html部分
<button id="button1">1</button>
<button id="button2">2</button>
<button id="button3">3</button>