본문 바로가기
기록

7/11 기록 (스코프)

by 홍재 2022. 7. 11.

학습 목표

  • 스코프의 의미와 적용 범위를 이해한다.
  • 스코프의 주요 규칙을 이해한다.
  • 전역 스코프와 지역 스코프의 차이를 이해한다.
  • block scope와 function scope의 차이를 이해한다.
  • 변수 선언 키워드(let, const, var)와 스코프와의 관계를 설명할 수 있다.
  • 전역 객체가 무엇인지 설명할 수 있다.

범위가 중괄호(블록) 또는 함수에 의해 나누어지고, 그 범위를 스코프라고 부름

 

바깥쪽 스코프에서 선언한 변수는 안쪽 스코프에서 사용 가능합니다.

반면에, 안쪽에서 선언한 변수는 바깥쪽 스코프에서는 사용할 수 없습니다.

 

특별히 가장 바깥쪽의 스코프는 전역 스코프(Global Scope)라고 부릅니다.

전역의 반대말은 지역(local)으로 전역이 아닌 다른 스코프는 전부 지역 스코프(local scope)입니다.

 

지역 스코프에 선언한 변수는 지역 변수, 전역 스코프에서 선언한 변수는 전역 변수입니다.

스코프 규칙에서 또 하나 기억해야 할 규칙은, 지역 변수는 전역 변수보다 더 높은 우선순위를 가집니다.

 

먼저 스코프는 두 가지 종류가 있습니다.

하나는 블록 스코프(block scope)라고 부르며, 중괄호를 기준으로 범위가 구분됩니다.

먼저 스코프는 두 가지 종류가 있습니다. 하나는 블록 스코프(block scope)라고 부르며, 중괄호를 기준으로 범위가 구분됩니다.

여기서 한 가지 유의해야 할 점이 있습니다. 화살표 함수는 블록 스코프로 취급됩니다. 함수 스코프가 아닙니다.

 

var 키워드는 for 문이 만들어낸 블록 스코프를 무시합니다.

var 키워드로 정의한 변수는 블록 스코프를 무시하고, 함수 스코프만 따릅니다. 그러나, 모든 블록 스코프를 무시하는 건 아닙니다. 화살표 함수의 블록 스코프는 무시하지 않습니다.

 

블록단위의 스코프를 작성할때 예측하기 쉽게 var 키워드 보다 let 키워드를 사용 권장

 

var 키워드보다 let 키워드가 안전한 이유는 또 있습니다.

let 키워드는 재선언을 방지합니다. 실제로 코딩할 때에 변수를 재선언해야 할 필요가 있을까요? 대부분 이런 경우는 버그입니다.

 

변하지 않는 값, 곧 상수(constant)를 정의할 때에는 const를 이용합니다.

const는 값의 재할당이 불가능합니다. 값을 재할당할 경우 TypeError를 내므로, 의도하지 않은 값의 변경을 막을 수 있습니다.

 

보통 애플리케이션을 만들 때에는, 내가 직접 작성하지 않은 수많은 다른 함수와 로직이 포함됩니다.

너도나도 똑같은 이름으로 전역 변수를 선언하려고 한다면 분명 문제가 발생할 것입니다.

이를 side effect라고 합니다. 전역 변수를 최소화하는 것은 side effect를 줄이는 좋은 방법입니다.

 

Strict Mode는 브라우저가 보다 엄격하게 작동하도록 만들어줍니다. 앞서 언급한 것처럼 "선언 없는 변수 할당"의 경우도 Strict Mode는 에러로 판단합니다. Strict Mode를 적용하려면, js 파일 상단에 'use strict' 라고 입력하면 됩니다. (따옴표 포함)