4
我目前正試圖用r.js優化當前的jQuery(開發版本1.8.1)。 這發生在使用gem requirejs-rails的rails項目的資產編譯過程中。遞歸函數r.js中的錯誤?
我想我在優化器中遇到了一個錯誤。圍繞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中的一個錯誤?或者是不允許的JavaScript?我想知道爲什麼我是第一個遇到問題的人(至少谷歌沒有任何解決辦法)。