猿问

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

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();


慕工程0101907
浏览 437回答 1
1回答

跃然一笑

我尝试了下lz的代码,下面的不使用闭包的代码并不能使用。var Regitem = ['\\d','[\\u4E00-\\u9FA5]','[a-z]','[A-Z]'];var fun_item = ['obj_isNumber','obj_isChar','obj_isSmall','obj_isLarge'];function goFunc(){&nbsp; &nbsp; for(var i = 0 ; i < fun_item.length ; i++){&nbsp; &nbsp; &nbsp; &nbsp; window[fun_item[i]] =&nbsp; function(obj){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return new RegExp(Regitem[i],'g').test(obj);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }}goFunc();这里的i在使用时候就已经为4了,在Regitem内是获取不到值的。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答