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

发布于 2022-09-06 00:11:38 字数 580 浏览 22 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一生独一 2022-09-13 00:11:38

我尝试了下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内是获取不到值的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文