Javascript r.js中递归函数的Bug?

Javascript r.js中递归函数的Bug?,javascript,jquery,rjs,Javascript,Jquery,Rjs,我目前正试图用r.js优化当前的jQuery(开发版本1.8.1)。 这发生在使用gem-requirejs-rails的rails项目中的资产编译期间 我想我在优化器中遇到了一个bug。在jquery源代码的第999行附近,您将找到以下代码: (function add(args) { jQuery.each(args, function (_, arg) { var type = jQuery.type(arg); if (type === "func

我目前正试图用r.js优化当前的jQuery(开发版本1.8.1)。 这发生在使用gem-requirejs-rails的rails项目中的资产编译期间

我想我在优化器中遇到了一个bug。在jquery源代码的第999行附近,您将找到以下代码:

(function add(args) {
    jQuery.each(args, function (_, arg) {
        var type = jQuery.type(arg);
        if (type === "function" && (!options.unique || !self.has(arg))) {
            list.push(arg);
        } else if (arg && arg.length && type !== "string") {
            // Inspect recursively
            add(arg);
        }
    });
})(arguments);
当优化的jquery到达包含
add(arg)的行时将抛出一个错误,未定义
add
。这是因为优化器将函数
add
重命名为
e
,而函数调用仍然是
add(…)
,如下所示:

(function e(args) {
    jQuery.each(args, function (_, arg) {
        var type = jQuery.type(arg);
        if (type === "function" && (!options.unique || !self.has(arg))) {
            list.push(arg);
        } else if (arg && arg.length && type !== "string") {
            // Inspect recursively
            add(arg);
        }
    });
})(arguments);
通过将代码重写为以下内容,我能够修复代码:

var fnAdd = function (args) {
    jQuery.each(args, function (_, arg) {
        var type = jQuery.type(arg);
        if (type === "function" && (!options.unique || !self.has(arg))) {
            list.push(arg);
        } else if (arg && arg.length && type !== "string") {
            // Inspect recursively
            console.log("inspecting", fnAdd);
            fnAdd(arg);
        }
    });
};
fnAdd(arguments);

这可以被认为是r.js中的一个bug吗?还是不允许使用javascript?我想知道为什么我是第一个遇到这个问题的人(至少谷歌没有发布任何解决方案)。

我猜这对我来说是个bug。虽然我个人不会使用您正在使用的语法,但它是有效的JavaScript,因此在我看来,r.js不是为处理这种类型的递归函数调用而设计的

出于兴趣,如果将add()调用置于其外部会发生什么?r.js是否正确地将其重命名为e()