私は現在、r.jsを使用して現在のjQuery(開発バージョン1.8.1)を最適化しようとしています。これは、gemrequirejs-railsを使用したrailsプロジェクトでのアセットのコンパイル中に発生します。
オプティマイザーにバグがあったと思います。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);
add(arg);
最適化されたjqueryがエラーを含む行に到達すると、それ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は許可されていませんか?なぜ私が最初に問題を抱えているのだろうか(少なくともグーグルは解決策を明らかにしなかった)。