스코프를 알아보기 전에 함수 선언식과 함수 표현식에 대해 알아보자.
function sum(a, b) {
return a + b;
}
const sum = function (a, b) {
return a + b;
}
호이스팅이 일어나는 상황을 지양하기 위해 되도록이면 함수 표현식을 이용해서 코드를 작성하는 것이 좋다.
참고: Function Declarations vs. Function Expressions
https://medium.com/@mandeep1012/function-declarations-vs-function-expressions-b43646042052
"모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정된다. 이를 스코프라 한다. 즉, 스코프는 식별자가 유효한 범위를 말한다." - 모던 자바스크립트 Deep Dive p. 190
내가 이해하기 쉬운 스코프의 정의는, "변수에 접근할 수 있는 유효 범위" 이다.
스코프는 몇 가지 특징이 있다.
JavaScript 는 변수를 참조(refer)할 때 스코프를 통해 변수를 참조한다.
지역 스코프에서 찾고, 없으면 → 상위 스코프 → ... → 전역 스코프 순으로.