js闭包小问题一枚

mmyiyi520 2013-02-22 12:48:23

for(var i=0,l=mc.length; i<l; i+=1){
mc[i].onmouseover = function(i){
return function(){
if(/_hover&/.test(this.className)){
return;
}else{
this.className = this.className + '_hover'
}
}

}(i)
}

求问为什么这里要return function(){},原理是什么
...全文
273 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
未知数 2013-02-22
  • 打赏
  • 举报
回复
for(var i=0,l=mc.length; i<l; i+=1){ mc[i].onmouseover = (function(i){ return function(){ if(/_hover&/.test(this.className)){ return; }else{ this.className = this.className + '_hover' } } })(i) } 把看上去非法的代码去掉了 这种写法是为了用闭包保存循环时的i值,因为循环结束后i的值为l;如果不这样做,事件执行时,所有绑定的onmouseover事件中的i都是l了,不能达到目的。函数是独立作用域,可以保护循环时的i值。 不过这儿函数内并没有使用i值,所以感觉这样写其实多此一举了
「已注销」 2013-02-22
  • 打赏
  • 举报
回复
绑定一个事件的触发时要调用的方法,所以要return 一个function

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧