JavaScript

[중앙정보처리학원] JavaScript* 스코프 (scope)

해보구 2024. 3. 29. 13:55

스코프(scope)란??

  • 모든 식별자(변수, 함수, 클래스 등)는 자신이 선언된 위치에 의해 다른 코드가 자신을 참조할 수 있는 유효 범위가 결정되는데 이를 스코프라고 부릅니다.

 

라고한다

 

var x = 99; // global scope : 전역 변수  // 다른코드랑 결합될수도 있음 최대한 안쓰는게좋음
var y = true;

function foo () {
  var x ='홍길동';  // local scope : 지역 변수
  console.log(`foo x: ${x}`);
  var y = '메롱';
  console.log(`foo y: ${y}`);
  var z = 100;
  return x;
}

전역 변수는 쓰지 않는 것이 좋다.

 

// 중첩 함수 : 함수 안에 함수를 정의
function outer(m) {
  var n ='outer local n';
  var v ='outer local v';
  console.log(n);
  console.log(v);
  console.log(m);

  // 헬퍼 함수 : 바깥쪽 함수 전용함수 (밖에서 호출 불가능)
  function inner() {
    console.log(n);
    var m = 'inner local m';
    console.log(m);

  }
  inner();
}

outer('outer param m');

 

 

 

var 키워드의 한계

변수 중복 선언 허용

  • var 키워드로 변수를 선언하면 동일한 이름으로 중복 선언시 var 키워드를 안 붙인 것처럼 동작
  • 변수를 중복 선언하면 의도치 않게 변수의 값이 변경되는 부작용이 발생.

블록 레벨 스코프를 지원하지 않는다!

  • var 키워드 변수는 오로지 함수의 영역만을 지역 스코프로 인정.
  • 함수가 아닌 블록들에서는 모두 전역 변수로 일괄 적용
  • 전역 변수를 남발할 가능성이 커지는 문제.

변수 호이스팅 문제

  • 호이스팅에 의해 변수 선언문이 자동으로 맨 위로 끌어올려진 것처럼 동작
  • 이는 프로그램의 흐름을 방해하여 코드의 가독성과 유지보수성을 현격하게 떨어뜨립니다.

 

 

그래서 보통 let과 const를 쓰는데 걍 웬만하면 const쓰고 for문에서 처럼 변경이 필요한 애들은

let으로 변수지정 해주면됨

 

// 호이스팅이 된다 : 함수를 먼저만들고 나중에 위치를 바꿀수 있다는거임 //                   

그니까 호출부 아래 함수가있어도 된다