JavaScript关于事件绑定

var odiv=document.getElementsByTagName('div');
function divclick(obj){
obj.onclick=function(){
console.log(obj);
}
}
for (var i = 0; i < odiv.length; i++) {
divclick(odiv[i]);
}
//当执行点击函数时,还需要divclick函数,因此当循环结束时,divclick函数并不会被销毁,因此其作用域也被保留下来,因此正常输出

for (var i = 0; i < odiv.length; i++) {
odiv[i].onclick=function(){
console.log(odiv[i]);//此时i已经变化了
}
}
//循环结束,绑定函数结束,函数自身、作用域、变量等都随之销毁,当执行onclick函数时,i值通过作用域链向上找,最后i作为全局变量且值为odiv.length+1,因此输出undefined

for (var i = 0; i < odiv.length; i++) {
odiv[i].onclick=function(){
console.log(this);
}
}
//这里涉及到this的指向问题,this指向调用的对象,且this指向是在函数执行时才确定的,并不是在函数定义时确定的
//当点击事件触发函数时,this指向调用对象,而这里的调用对象正是odiv[i],因此正常输出

  

原文地址:https://www.cnblogs.com/chenyongyang/p/7708090.html