2012-09-11 2 views
4

현재 r.js로 현재 jQuery (개발 버전 1.8.1)를 최적화하려고합니다. 이는 보석 requirejs-rails가있는 레일스 프로젝트의 자산 편집 중에 발생합니다.재귀 함수에 대한 r.js의 버그?

나는 최적화 프로그램에서 버그가 발생했다고 생각합니다. 최적화 된 JQuery와 슬로우됩니다 add(arg); 오류를 포함하는 줄에 도달 할 때 add가 정의되어 있지 않은 것을,

(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와 소스 라인 999의 주위에, 다음과 같은 코드를 찾을 수 있습니다. 함수 호출과 같이 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의 버그로 간주됩니까? 또는 자바 스크립트 허용되지 않습니다? 나는 왜 내가 문제를 가지고있는 첫 번째인지 궁금하다 (적어도 구글은 어떤 해결책도 밝히지 않았다).

답변

1

제 버그는 저에게 버그 같아 보입니다. 개인적으로 사용하고있는 구문을 사용하지는 않지만 유효한 JavaScript입니다. r.js가이 유형의 재귀 함수 호출을 처리하도록 설계되지 않은 것처럼 보입니다.

관심 없기 add() 호출을 자신의 외부에두면 어떻게됩니까? r.js가 e()에 올바르게 이름을 바꿉니 까?

관련 문제