본문 바로가기

(펌)개념 정리

함수 스코프와 블록 스코프

1. 블록 스코프, 함수 스코프

(1) 스코프란?

  • 스코프(scope)는 변수에 접근할 수 있는 범위를 말한다.
  • 스코프는 크게 전역 스코프와 지역 스코프로 나눌 수 있다.
  • 전역 스코프(global)는 어디에서든 해당 변수에 접근 가능한 걸 의미한다. (전역변수)
  • 지역 스코프(local)의 경우, 한정적인 범위에서 해당 변수에 접근이 가능하다. (지역변수)
  • 지역 스코프에는 함수 스코프와 블록 스코프가 있으며 이 포스팅에서는 두 스코프에 대해 알아본다.

 

(2) 함수 스코프와 var

  • 함수가 선언되면 하나의 스코프(접근 범위)가 발생하는데 이걸 함수스코프라고 한다.
  • 함수 스코프는 함수에서 선언한 변수는 해당 함수 내에서만 접근 가능하다는 걸 의미한다.
  • 아래 예시처럼 함수 외부에서 aa를 호출하면 undefined 에러가 뜬다.
function abc() {
  var aa = '12';  // 함수 내부에서 선언
}
console.log(aa);  // Uncaught ReferenceError: aa is not defined

 

  • 만약 변수가 함수 내부에 선언된 것이 아니면 이 변수의 스코프는 전역 스코프(global)이므로
  • 어디에서든 접근이 가능하다.
var abc = '123';
console.log(abc)  // 123

 

  • var은 함수 내에서만 지역 변수로 유지되기 때문에, 아래 코드에서는 전역 변수로 취급된다.
if (true) {
  var abc = '123'; // var로 선언하면 블록에 의한 범위 제한이 없음
}
console.log(abc)  // 123
if (true) {
  const abc = '123';  // const, let은 블록 스코프를 따름
}
console.log(abc)      // ReferenceError: abc is not defined



(3) 블록 스코프와 const, let

  • 블록 스코프는 블록({})내부에서 선언된 변수는 해당 블록에서만 접근 가능한 걸 말한다.
  • let, const로 선언된 변수가 블록 스코프 방식을 따른다.

var과의 차이점을 보자

  • var의 경우 함수 스코프를 따르므로, 함수 내부에서는 변수 접근이 가능하다.
function hello() {
  for (var i=0; i<12; i++) {
    ...
  }
  console.log(i)   //접근가능
}

hello();  //12

 

  • 하지만, let, const는 블록 스코프를 따르므로 블록 바깥에서는 변수 접근이 불가하다.
function hello() {
  for (let i=0; i<12; i++) {
    ...
  }
  console.log(i)
}
hello();  //ReferenceError: i is not defined

 

ES6이전에는 변수 선언시 var을 사용했는데, 앞서 봤다시피 var은 함수 내에서만 지역 변수로 유지된다.
하지만 ES6에 추가된 let,const의 경우 함수가 아닌 블록 단위에서 지역변수로 선언됨을 알 수 있다.

출처 - https://mong-blog.tistory.com/entry/%EB%B8%94%EB%A1%9D-%EC%8A%A4%EC%BD%94%ED%94%84-%ED%95%A8%EC%88%98-%EC%8A%A4%EC%BD%94%ED%94%84%EC%9D%98-%EC%B0%A8%EC%9D%B4-javascript

'(펌)개념 정리' 카테고리의 다른 글

JSX란 무엇인가  (0) 2022.11.15
React vs Angular vs Vue 비교  (0) 2022.11.15
클로저란?  (0) 2022.11.12
호이스팅 이란?  (0) 2022.11.12
promise와 async/await의 차이점  (0) 2022.11.12