2014-09-18 2 views
1

jslint가 왜이 점에 대해 불평합니까 ??Jslint가 배열을 반복하는 것에 대해 불평합니다

for (var i = 0; i < array.length; i ++) { 
    console.log(array[i]); 
} 

오류 메시지는 다음과 같습니다

Move 'var' declarations to the top of the function. 

이 필요한 것보다 더 넓은 범위에서 변수를 선언 나에게 아무 의미 (블록 BTW 각각 자신의 sope을 가지고 있습니까?).

무엇이 잘못 되었나요? 이것이 jslint의 변덕이라면 어떻게 든이 특별한 경우 만 무시할 수 있을까요?

+1

'for' 루프는 자체 범위를 가지지 않으며 함수 만 수행합니다. JavaScript에는 블록 범위가 없으며 어휘 범위 만 있습니다. 여기에 몇 가지 내용이 있습니다 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions. 그리고 기술적으로 JSHint가 제안한 이유는'i' 선언이 범위 상단에 ** 올라와 있기 때문입니다. 이에 대한 내용은 다음에서 볼 수 있습니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting – Ian

+0

@Ian 'let'이 있습니다. – simonzack

+1

@imonzack 네 말이 맞아. 불행하게도 그것은 ES6에 있으며 많은 브라우저에서 지원되지 않습니다. 댓글을 달거나 답변하고 설명해 주셔서 감사합니다. 그리고 JSLint가 그것을 인식 할 수 없을 때 실제로 도움이되지 않습니다. – Ian

답변

1

자바 스크립트 블록 범위를 가지고 있지 않기 때문에이 :

function foo() { 

    var i; 

    // some code 

    for (i = 0; i < a.length etc 

JSLint 당신이 JS 범위 지정 규칙을 인식하지 않을 수 있다고 생각하고 제안 :

function foo() { 

    // some code 

    for (var i = 0; i < a.length etc 

은과 동일 통역사가 실제로 어떻게 작동하는지에 따라 소스를 재구성합니다. 즉, 두 번째 옵션을 사용하십시오.

나는 밖으로의 문맥 선언이 심각 가독성을 줄일 수 있기 때문에, 그렇게되지 개인적으로 결코 :

function foo() { 

    var i; // what the heck is this for? 

    // some code 
    // more code 
    // even more code 

    for (i = 0; i < a.length // where the heck does this come from? 

http://c2.com/cgi/wiki?DeclareVariablesAtFirstUse이 방법의 장점과 콘트라에 대해 설명합니다.

+0

그 특별한 경고는 실제로 사람들이 JSLint에서 JSHint와 같은 다른 것으로 옮겨야하는 이유 중 가장 큰 이유 일 것입니다. – ohlec

관련 문제