父函数内部批量构建子函数,子函数函数名称与子函数内部都有变量的闭包问题?

var Regitem = ['\\d','[\\u4E00-\\u9FA5]','[a-z]','[A-Z]'];
var fun_item = ['obj_isNumber','obj_isChar','obj_isSmall','obj_isLarge'];

function goFunc(){
    for(var i = 0 ; i < fun_item.length ; i++){

        window[fun_item[i]] = (function(i){
            return function(obj){
                return new RegExp(Regitem[i],'g').test(obj);
            }    
        })(i);

        //实际上下面这个也是对的。这是为什么啊?为什么这里不用闭包?
        window[fun_item[i]] =  function(obj){
                return new RegExp(Regitem[i],'g').test(obj);
        }    
    }
}
goFunc();
阅读 2.3k
1 个回答

我尝试了下lz的代码,下面的不使用闭包的代码并不能使用。

var Regitem = ['\\d','[\\u4E00-\\u9FA5]','[a-z]','[A-Z]'];
var fun_item = ['obj_isNumber','obj_isChar','obj_isSmall','obj_isLarge'];

function goFunc(){
    for(var i = 0 ; i < fun_item.length ; i++){
        window[fun_item[i]] =  function(obj){
            return new RegExp(Regitem[i],'g').test(obj);
        }    
    }
}
goFunc();

这里的i在使用时候就已经为4了,在Regitem内是获取不到值的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题