더북(TheBook)

마일리지 목록을 순회하는 루프문 안에서 함수를 선언했다는 사실을 JSHint가 친절하게 잘 가르쳐주고 있다. 그런데 어차피 단위 테스트는 성공했고, 함수를 루프 안에 선언했다고 로직 에러는 아니다. 그럼 뭐가 문제란 말인가?

주지하다시피 JSHint는 자바스크립트 코드의 미심쩍은 부분을 찾아낸다. 결과가 옳으냐 그르냐를 떠나 루프가 한 번 순회할 때마다 함수를 다시 선언하는 행위는 분명히 정상은 아니다. 이 예제에도 큰 영향을 미치지는 않지만, 적어도 비효율적인 코드인 건 분명하다. 따라서 부정확하게, 잘못된 방향으로 실행될 수 있다.

TIP

JSHint 공식 문서(http://www.jshint.com/docs/options/#loopfunc)에서 “Don’t make functions in a loop” 경고를 보면 논리적으로 부정확한 코드 예제를 찾을 수 있다.

 

잠깐, 만일 루프 안에 함수를 두어야 할 합리적인 이유가 있다면? JSHint를 실행할 때마다 성가신 경고 메시지를 다시 보게 되리라. 특정 라인에서 발생한 특정 경고는 잊어도 좋다는 걸 개발자가(또는 같은 팀 다른 개발자가) 알려줘야 하는 걸까?

다행히 그럴 필요는 없다. JSHint는 전역 범위에서, 또는 특별한 형태의 주석을 달아 국지적으로 규칙을 ‘건너뛰게’ 설정할 수 있다.

루프 안에서 함수를 선언한 건 일부러 그런 것이니 loopfunc 규칙은 그냥 넘어가라고 JSHint에 주석을 붙여 알려주는 것이다(예제 2-42).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.