2015-01-27 5 views
1

내 문제는 우리가 현재 프로젝트에 대한 2K JS 라인을 가지고 JSHint won't let me use 'forEach' in a 'for' loopJshint : 루프 (이슈) 내에서 Anonmyous 기능이

유사하다 최근 jshint 검사를 포함, 하나의 공통 문제는 아래의 샘플 코드는

를 던질 것입니다

Don't make functions within a loop.

샘플 코드 :

var s1 = '12345'.split(''); 
var oo = { a: s1, b: s1, c: s1}; 

function odd(obj){ 
    var tmp = []; 
    for (var key in obj){ 
     obj[key].forEach(function(val){ 
      if(val%2>0) tmp.push(val); 
     }); 
    } 
    return tmp; 
} 


odd(oo); 

내 수정했다 :

function odd(obj){ 
    var tmp = [], tmpFn; 
    tmpFn = function(val){ 
     if(val%2>0) tmp.push(val); 
    }; 
    for (var key in obj){ 
     obj[key].forEach(tmpFn); 
    } 
    return tmp; 
} 

이 코드가 작동하는지는 확인했지만 이전 코드를 수정하는 올바른 방법인지 확실하지 않습니다.이 수정 프로그램에서 원하지 않는 부작용이 있습니까? 또는 이전 코드가 훨씬 더 깨끗해 보인 것처럼 경고를 무시해야합니까?

편집 : 나는 그것으로 루프에 대한 업데이트 된 샘플 코드를 놓쳤다.

+1

코드를 복사/붙여 넣을 때이 오류가 표시되지 않습니다. 문제를 표시하는보다 완벽한 코드 샘플을 보여줄 수 있습니까? –

+2

그 코드는 * 루프에 함수를 만드는 것이 아니며, 루프에'function odd() {...} '가 없으면 훨씬 더 심각한 구문 오류입니다 : Function * declarations * are not allowed 내부의 제어 구조이기 때문에 실행 컨텍스트의 최상위 레벨에 있어야합니다 (예 : 함수 또는 전역 컨텍스트의 모든 제어 구조 외부). –

+0

사이드 노트 : 나는 그것을 위해'filter'를 사용할 것입니다. –

답변

2

경고를 무시하지 말고 루프를 실행할 때마다 새로운 함수를 만드는 것이 실제로 필요하지 않습니다.

이 방법은 더 좋으며 정의와 함께 odd() 함수를 사용하는 한 부작용이 없으며 익명 함수가 전달 될 때와 동일한 변수 상태가 표시됩니다 각각.

편집 : 경고를 무시하겠다고해도 실수로 생각하지 않는 jshint 구성을 사용하거나 jshint 주석을 추가하여 코드 내에이 경고 유형을 일시적으로 사용 중지하십시오 (jshint - 선택 토글 링에 대한 경고 코드를 얻으 려하지 않음), 표시된 jshint 경고가 사전에 통보되지 않도록하여 코드 분석의 목적을 우회하지 마십시오.

+0

런타임시 익명 함수로 전달되는 동적 템플릿을 만들 때까지는이 경고가 피하는 것이 아니라고 생각합니다. 이러한 코드는 피해야합니다. – Vijay