scope는 참조의 대상이 되는 식별자(identifier)를 찾기 위한 유효한 범위라고 볼 수 있습니다. 자바스크립트는 이 규칙대로 식별자를 찾게 됩니다. 크게 전역 스코프(Global scope)와 지역 스코프(Local scope or Function-level scope)로 나눌 수 있는데, 전역 스코프는 코드 어디에서든지 참조할 수 있고 지역 스코프는 함수 코드 블록이 만든 스코프로 함수 자신과 하위 함수에서만 참조가 가능합니다.
대부분의 C-family language는 블록 레벨 스코프(block-level scope)를 따르지만 자바스크립트는 함수 레벨 스코프(function-level scope)를 따릅니다. 단, ES6에서 도입된 let을 사용하면 블록 레벨 스코프를 사용할 수 있고, 상황에 따라 let 사용을 권고하는 경우가 많습니다.
전역 변수의 사용은 변수 이름이 중복될 수 있고, 의도치 않은 재할당에 의한 상태 변화로 코드를 예측하기 어렵게 만드므로 꼭 필요한 경우에만 사용하는 것이 좋습니다.
꼬리 질문
함수 레벨 스코프(Function-level scope)
함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. 즉, 함수 내부에서 선언한 변수는 지역 변수이며 함수 외부에서 선언한 변수는 모두 전역 변수이다.
블록 레벨 스코프(Block-level scope)
모든 코드 블록(함수, if 문, for 문, while 문, try/catch 문 등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수이다.
C-family language
"C-family language"는 주로 C 프로그래밍 언어와 그와 관련된 언어들을 일컫는 용어입니다. C 프로그래밍 언어는 1970년대에 처음 개발된 프로그래밍 언어로, 컴퓨터 과학 및 소프트웨어 개발 분야에서 널리 사용되는 중요한 언어 중 하나입니다. C 언어는 단순하면서도 강력한 기능을 제공하여 시스템 프로그래밍, 응용 프로그래밍, 임베디드 시스템 등 다양한 분야에서 사용됩니다. 또한 C 언어는 많은 다른 프로그래밍 언어의 기반이 되었고, 많은 프로그래밍 언어가 C 언어의 문법과 구조를 모방하거나 확장하여 개발되었습니다. 이런 언어들을 통틀어 "C-family language"라고 부르는 것입니다. 예를 들어, C++는 C 언어의 기능을 확장하여 객체 지향 프로그래밍을 지원하는 언어로, C 언어의 특징을 계승하면서도 더 많은 기능을 추가하였습니다. 또한 C#(C Sharp)은 Microsoft에서 개발한 언어로, C++과 Java 등의 영향을 받아 개발된 언어입니다. 이런 언어들이 C-family language의 일부로 간주됩니다.