JSLint 오류 : 모든 'var'선언을 함수의 맨 위로 이동
JSLint 사이트가 업데이트되어 더 이상 JS 스크립트를 확인할 수 없습니다. 저에게이 경고는 중요하지 않습니다.이 문제를 해결하기 위해 수천 줄을 넘기고 싶지 않습니다. 더 중요한 문제를 찾고 싶습니다.
아무도이 오류를 끄거나 레거시 JSLint를 사용하는 방법을 알고 있습니까?
최신 정보
예:
function doSomethingWithNodes(nodes){
this.doSomething();
for (var i = 0; i < nodes.length; ++i){
this.doSomethingElse(nodes[i]);
}
doSomething(); // want to find this problem
}
jslint.com 출력 :
Error:
Problem at line 4 character 8: Move all 'var' declarations to the top of the function.
for (var i = 0; i < nodes.length; ++i){
Problem at line 4 character 8: Stopping, unable to continue. (44% scanned).
문제:
함수 위에 변수를 추가하는 것은 새로운 요구 사항입니다. 이 오류에서 스크립트 스캔을 중지하기 때문에 JSLINT를 사용하여 코드를 테스트 할 수 없습니다.
나는 많은 코드를 가지고 있으며이 경고를 심각한 오류로 위협하고 싶지 않습니다.
업데이트 8/22/2011 : http://jshint.com 발견 , http://jslint.com/ 보다 훨씬 좋아 보입니다.
2017 년 6 월 업데이트 : 지원 대상 (예 : Internet Explorer 10 이하에서 JavaScript를 실행하지 않는 경우), var 대신 let 을 사용해야합니다 .
예를 들면 : for(let i=0; ...; i++)
내 기능의 맨 위에 var i;
a 를 넣을 방법이 없습니다 for(var i=0; ...; i++)
. 특히 JavaScript 사양 이 for
섹션 (12.6) 에서 허용 가능한 구문으로 포함하는 경우 . 또한 Brendan Eich 가 그의 예에서 사용 하는 구문 입니다.
선언을 맨 위로 옮기는 아이디어는 후드 아래에서 일어나는 일을 더 정확하게 반영해야한다는 것입니다. 그러나 그렇게하면 영향을주지 않고 반영 할뿐입니다.
나에게 이것은 for
반복에 대한 어리석은 기대입니다 . JSLint가 감지하면 처리를 중지하기 때문에 더욱 그렇습니다.
함수의 맨 위에 변수를 선언하는 것이 더 읽기 쉬운 지 여부는 논쟁의 여지가 있습니다. 나는 개인적으로 반복기 변수가 사용될 때 선언되는 것을 선호합니다. 변수가 내부적으로 이미 생성되어 있는지 상관하지 않습니다. 여기서 초기화하고 있으므로 안전합니다.
사용되는 반복기 변수를 선언하면 실수로 전역 화되지 않도록 보장한다고 주장합니다 (루프를 다른 함수로 이동하면 반복기 변수도 함께 이동합니다). 이것은 함수 상단에 변수 선언을 유지하는 것보다 훨씬 더 유지 관리가 쉽습니다.
지금은 http://www.javascriptlint.com/online_lint.php를 사용 하고 있습니다. 중요한 것에 초점을 맞추는 것 같기 때문입니다.
Google Closure 컴파일러는 for (var i in ...)와 같이 선언되지 않는 한 for ... in 루프의 루프 변수 유형을 올바르게 감지하지 못하며 주석이이 문제를 해결하는 것처럼 보이지 않으므로 선언을 이동할 수 없습니다. 맨 위로.
언제든지 기존 버전을 다운로드 하거나 최신 버전을 수정할 수 있습니다 . 그다지 어렵지 않습니다 move_var
. 그런 다음 노드를 사용하거나 간단한 HTML 형식의 브라우저를 사용하여 jslint를 로컬에서 실행합니다. Crockford의 원본을 복사 할 수 있습니다.
경고는 주요 재 작성의 일부로 도입되었으며 이후에만 발생 for(
하므로 메시지가 약간 오해의 소지가 있습니다.
모든 변수를 맨 위로 이동하는 것은 "함수 당 하나의 var 문 허용"과 다릅니다. 모든 변수를 맨 위로 이동해야하는 요구 사항은 새로운 것이며 스위치가없는 것 같습니다. http://groups.google.com/group/jsmentors/browse_thread/thread/5e90c25230f8e22/70e1a95a20fb829e 에서 자세히 알아보기
최신 버전의 JSLINT로 전환하고 싶을 때 코드베이스에서이 문제가 발생했습니다. 우리는 많은 것을 가지고 있었고 사람들은 선언을 옮기는 것에 만족하지 않았습니다. 실제로 가장 우아한 해결책은 underscore.js를 사용하고 전체 장황한 루프를 사용하는 대신 _.each () 함수를 사용하여 JSLint 오류를 제거하고 코드를 더 기능적이고, 깨끗하고, 더 엄격하고, 더 쉽게 만들었습니다. 읽다.
짝수 불구하고 새로운 베타 JSLint는 여러 댓글 지시 문서화하지 않는 var
함수 내에서 허용 오차를, 않습니다 원래 버전의 지시를 지원하기 위해 나타납니다.
원래 JSLint를 사용하면 다음을 수행 할 수 있습니다.
/*jslint vars: true */
In my experience this still works—I suppose for backwards compatibility. The time of this writing is June 2015.
I found that the following syntax will get the error removed:
function doSomethingWithNodes(nodes) {
this.doSomething();
var i; // HERE is where you move the 'var' to the top of the function
for (i = 0; i < nodes.length; ++i) {
this.doSomethingElse(nodes[i]);
}
doSomething(); // want to find this problem
}
'Programing' 카테고리의 다른 글
Netbeans에서 이상한 "상자"커서 및 선택 동작을 끄는 방법은 무엇입니까? (0) | 2020.10.14 |
---|---|
왼쪽 상단이 둥근 모서리와 왼쪽 하단이 둥근 모서리로 모양을 만드는 방법은 무엇입니까? (0) | 2020.10.14 |
int (C #)의 첫 번째 숫자를 어떻게 얻을 수 있습니까? (0) | 2020.10.13 |
nodejs에서 node-sass를 사용할 때 libsass 바인딩을 찾을 수 없습니다. (0) | 2020.10.13 |
C99에서 가장 유용한 새 기능은 무엇입니까? (0) | 2020.10.13 |