$
변수 에서 사용하는 데 아무런 문제가 없습니다 . 모든 변수에 대해 의도적으로하지는 않지만 여전히 유효한 구문입니다. jQuery는 $
변수 이름으로 사용되는 예제 중 하나입니다 . 그렇기 때문에 "Chrome 개발 도구가 항상 자바 스크립트 오류임을 인식하지는 않습니다" 라는 이유도 있습니다. 처음에는 오류가 없기 때문입니다.
다음과 같은 코드 작성이 두려운 경우 :
var demo = function demo() {
var a = 123;
...
$a = 456; // A new variable is created in global scope.
}
그런 다음 jsLint , jsHint 또는 Google Closure Linter 와 같은 스타일 검사기를 사용해야합니다 . 그 중 어느 것? 선택하는 것은 당신에게 달려 있습니다. 이를 돕기 위해 몇 가지 참고 사항이 있습니다.
스타일
Google Closure Linter는 똑똑하게 수행되는 것으로 알려진 Google JavaScript 스타일 가이드를 따릅니다 . JavaScript 또는 다른 6 개 언어에 대해 잘 알려진 스타일을 사용하는 것이 좋습니다. 코드를 공유하거나 새로운 개발자를 고용 할 때 이미이 스타일에 익숙 할 것입니다.
많은 개발자들도 Douglas Crockford 스타일에 익숙합니다. 이 스타일은 JavaScript : The Good Parts 에 자세히 설명되어 있으며, JavaScript를 사용 하는 사람이라면 누구나 구입할 수있는 책입니다.
jsHint에 관해서는, 실제로 어떤 규칙이 사용되는지 찾을 수 없으며 웹 사이트 자체는 그 주제에 대해 이야기하지 않는 것 같습니다. 어쩌면 나는 뭔가를 놓쳤다.
IDE 지원
jsLint와 jsHint 는 PhpStorm 에서 지원 됩니다. 이것은 Google Closure Linter 의 경우에도 해당 됩니다.
환경
Google Closure Linter는 일련의 도구 중 하나입니다 . 이미 Google Closure Compiler 또는 Google Closure Library 를 사용하고 있다면 다른 도구보다 Closure Linter를 선택하는 것이 좋습니다.
엄밀
jsLint는 엄격한 것으로 알려져 있습니다. jsHint는 더 관대하며 항상 좋은 것은 아닙니다. 예를 들어, jsHint에 대해 jsLint를 분기시키는 이유 중 하나는 jsLint 에는 오류를 생성하지만 jsHint에는 오류를 발생시키는 잘못된 코드를 보여주는 기사 에서 설명합니다 .
/*global jQuery */
// Example taken from jQuery 1.4.2 source
jQuery.extend({
/* ... */
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
/* ... */
});
JavaScript에는 블록 범위가 있지만 그렇지 않은 것처럼 보이기 때문에 코드가 잘못되었습니다. JavaScript : 좋은 부분, p. 102, 부록 A : 끔찍한 부품, 범위. 다시 말해, 언어를 모른 채 코드를 살펴보면 name
루프 외부에서는 보이지 않지만 코드 는 계속 표시됩니다.
Google Closure Linter에 관해서는 jsLint와 jsHint의 중간에 있다고 생각하지만 그것을 뒷받침 할 정보가 충분하지 않습니다.
결론
나는 jsHint를 피할 것입니다 : 너무 관대합니다. 즉, 다른 린터가 감지 할 수있는 잠재적 인 버그를 찾지 못합니다. 사용 된 스타일 가이드를 찾기가 어렵습니다.
jsLint와 Google Closure Linter 중에서 선택이 명확하지 않습니다. 둘 다 전문가에 의해 작성되었으며, 이미 수천 명의 개발자가 따르는 엄격하고 잘 설명 된 스타일 가이드를 따릅니다. 얼마 동안 둘 다 사용한 다음 더 실용적 인 것을 선택하십시오.