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(){},原理是什么javascript闭包function

解决方案 »

  1.   

    绑定一个事件的触发时要调用的方法,所以要return 一个function
      

  2.   

    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值,所以感觉这样写其实多此一举了