Skip to content
← Back to rules

eslint/block-scoped-var 의심스러움

작동 방식

변수가 동일한 블록 스코프 내에서 선언되고 사용되도록 강제합니다.
이 규칙은 변수가 의도된 블록 외부에서 잘못 사용되는 것을 방지하며, 자바스크립트에서 C 스타일의 블록 스코프를 모방합니다.

왜 좋지 않은가?

자바스크립트의 var 선언은 해당 함수의 가장 위로 올라갑니다(호이스팅).
이는 iffor와 같은 블록 안에 선언된 변수가 블록 외부에서도 접근 가능하게 만들 수 있습니다.
이로 인해 찾기 어려운 버그가 발생할 수 있습니다.
블록 스코프를 강제함으로써 이 규칙은 호이스팅 문제를 피하고, 다른 언어들이 블록 변수를 다루는 방식과 더 일치하게 됩니다.

예시

이 규칙에 대해 잘못된 코드 예시:

js
/* block-scoped-var: "error" */

function doIf() {
  if (true) {
    var build = true;
  }
  console.log(build);
}

function doLoop() {
  for (var i = 0; i < 10; i++) {
    // 무언가 수행
  }
  console.log(i); // i가 여기서도 접근 가능
}

function doSomething() {
  if (true) {
    var foo = 1;
  }
  if (false) {
    foo = 2;
  }
}

function doTry() {
  try {
    var foo = 1;
  } catch (e) {
    console.log(foo);
  }
}

이 규칙에 대해 올바른 코드 예시:

js
/* block-scoped-var: "error" */

function doIf() {
  var build;
  if (true) {
    build = true;
  }
  console.log(build);
}

function doLoop() {
  var i;
  for (i = 0; i < 10; i++) {
    // 무언가 수행
  }
  console.log(i);
}

function doSomething() {
  var foo;
  if (true) {
    foo = 1;
  }
  if (false) {
    foo = 2;
  }
}

function doTry() {
  var foo;
  try {
    foo = 1;
  } catch (e) {
    console.log(foo);
  }
}

사용 방법

이 규칙을 활성화하려면 설정 파일 또는 CLI를 사용할 수 있습니다:

json
{
  "rules": {
    "block-scoped-var": "error"
  }
}
bash
oxlint --deny block-scoped-var

참고 자료