-
Scope, ClosureNote 2020. 10. 27. 20:40
Scope
- 변수 접근 규칙에 따른 유효 범위
- 변수는 어떠한 환경 내에서만 사용 가능, 프로그래밍 언어는 각각의 변수 접근 규칙을 가진다.
- 변수와 그 값이, 어디서부터 어디까지 유효한지를 판단하는 범위
- 자바스크립트는 기본적으로, 함수가 선언되는 동시에 자신만의 scope를 가진다.
Local Scope vs Global Scope
- 변수 firstName에 접근할 수 있는 범위가 존재
- Local Scope 안쪽에서 선언된 변수는 밖에서 사용할 수 없다.
- 안쪽 Scope에서 바깥 변수/함수를 접근하는 것은 가능
- 바깥쪽 Scope에서 안쪽 변수/함수를 접근하는 것은 불가능
- Socpe는 중첩이 가능 : 함수 안에 함수를 넣을 수 있다.
- Global Scope는 최상단의 Scope로 전역 변수는 어디서든 접근이 가능
- 지역 변수는 함수 내에서 전역 변수보다 더 높은 우선순위를 가진다.
Function Scope vs Block Scope
Block : 중괄호로 시작하고 끝나는 단위
- block 범위를 벗어나는 즉시 변수를 사용할 수 없다.
var 키워드 vs let 키워드
- 변수를 정의하는 또 다른 키워드 var
- 자바스크립트는 기본적으로, 함수 단위로 자신만의 Scope를 가진다(var 키워드).
- 그러나, Block 단위로 Scope를 구분했을 때에 예측하기 쉬운 코드를 작성할 수 있다(let 키워드).
- block 범위를 벗어나도(같은 function scope에서는) 사용이 가능
Const 키워드
- 값이 변하지 않는 변수, 즉 상수를 정의할 때 사용하는 키워드
- let 키워드와 동일하게 Block Scope에 따른다.
- 값을 재정의하려고 하면 TypeError가 발생한다.
Closure
- 외부 함수의 변수에 접근할 수 있는 내부 함수
- 이미 실행이 종료된 함수의 변수나 함수를 참조할 수 있는 링크를 가진 내부 함수
- 이러한 작동 원리를 일컫는 용어
- 클로저 함수 안에서는 지역 변수(innerVar), 외부 함수의 변수(outerVar), 전역 변수(globalVar)의 접근 전부 가능
유용한 클로저 예제
커링 : 함수 하나가 n개의 인자를 받는 대신, n개의 함수를 만들어 각각 인자를 받게 하는 방법
x의 값을 고정해놓고 재사용할 수 있다.