JavaScript 압축기를 만들고 있는데 "지역 변수 축소"단계에 있습니다. 나는 압축기의 결과를 다양한 온라인 압축기와 비교해 보았고 Dean Edwards' /packer/으로 흥미로운 것을 발견했습니다.JavaScript의 변수 축소
(function(window, undefined) {
var document = window.document,
navigator = window.navigator,
location = window.location;
});
내 압축기는 다음과 같은 코드를 반환 :
(function(a,b){var c=a.document,d=a.navigator,e=a.location});
하지만/포장/반환이 :
(function(a,b){var c=a.document,navigator=a.navigator,location=a.location});
을
의 예로 들어 jQuery 라이브러리의 조각을 보자
/packer /가 var 목록의 첫 번째 변수 이후에 변수를 축소하지 않는 이유가 있습니까? 그것은 단순히 버그입니까, 아니면 이유가 있습니까?
얼핏보기에 그러나 이제 jQuery 라이브러리에서 또 다른 예를 살펴 보자, 내 압축기가 옳은 일을하고 더 나은 최종 결과를 줄 것이다 나타납니다 :
var jQuery = (function() {
var jQuery = function(selector, context) {
return new jQuery.fn.init(selector, context, rootjQuery);
},
// some other vars
rootjQuery;
// etc...
});
이 조각이 중요하기 때문에 변수 rootjQuery
은 정의되기 전에 참조됩니다. 이 경우/포장에서
rootjQuery
를 압축하지 않지만
가 내 압축기 코드를 조금 엉망 그러나
var jQuery=(function(){var c=function(a,b){return new c.fn.init(a,b,rootjQuery)},rootjQuery});
때문에를 (아직 정의되지 않았으므로) return 문에 언급 된대로 나중에 정의 될 때 압축합니다.
var jQuery=(function(){var a=function(b,c){return new a.fn.init(b,c,rootjQuery)},b});
코드를 실행하려고하면 분명히 오류가 발생합니다.
여기에 어떤 방법이 있습니까? 딘 에드워즈 (Ed Edwards)는이 문제가 너무 커서 첫 번째 var를 압축하여 홀수 번째 경우에 이와 같은 경우가 나타나면 오류가 발생하지 않을 것임을 알았습니다.
정의되기 전에 사용되는 변수를 선택하고 압축하지 않는 것이 좋습니다. 그러나이 경우에는 rootjQuery
이 정의 된 것과 다른 범위에서 사용되기 때문에 간단하지 않습니다. 내가 도달 할 때까지 어떤 범위를 정의 할 지 알 길이 없습니다.
확실하지 않습니다. 쉼표를 사용하는 대신에 세 가지'var' 문을 작성하면 부작용에 차이가 없어야하지만 * 세 가지가 모두 작아집니다. – pimvdb
압축을 시도하기 전에 원본 파일 (및 소스 외부에서 들어오는 모든 전역)에 대한 완전한 이해를 구축해야하는 것처럼 들릴 수도 있습니다. 왜 'var v1, v2, v3, ...'목록에서 2, 3 등의 변수를 압축 할 수 없는지 알 수 없습니다. –
rootjQuery 매개 변수에 대한 의견을 보내 주셔서 감사합니다. 시간을 절약하십시오. – Gerry