Javascript r.js中递归函数的Bug?
我目前正试图用r.js优化当前的jQuery(开发版本1.8.1)。 这发生在使用gem-requirejs-rails的rails项目中的资产编译期间 我想我在优化器中遇到了一个bug。在jquery源代码的第999行附近,您将找到以下代码: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
(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()