JS자문자답_2. 스코프와 클로저

Seoyong Lee·2021년 4월 26일
0

JavaScript / TypeScript

목록 보기
17/25
post-thumbnail

스코프란 무엇인가?

스코프(scope)는 말 그대로 변수에 접근할 수 있는 '범위'이다. 이러한 범위는 크게 전역 스코프(Global scope)지역 스코프(Local scope)로 나누어진다. 또한 전역 스코프에서 선언된 변수를 전역 변수라고 하며, 지역 스코프에서 선언된 변수를 지역 변수라고 한다.

전역 변수의 사용은 왜 자제되어야 하는가?

지역 변수는 변수가 선언된 구역 안에서만 사용이 가능하나 전역 변수는 모든 지역에서 접근이 가능하다. 이러한 특성은 때때로 예기치 못한 문제를 발생시키며, 만약 전역 변수로 설정된 변수와 같은 이름의 변수가 지역에서 사용된다면 서로 충돌하는 경우가 발생한다. 이러한 문제 때문에 되도록 코드 작성 시 지역 변수만을 사용하는 것이 권장된다.

블록 스코프와 함수 스코프는 무엇인가?

블록 스코프는 말 그대로 블록({ })으로 감싸진 범위를 말한다. 이러한 블록 내부에서 선언된 변수는 블록 밖에서 접근이 불가능한 전역 변수이다. 마찬가지로 함수 스코프는 함수의 내부 영역을 말한다. 이러한 함수의 선언도 결국 블록을 이용하므로 함수 스코프블록 스코프의 일종으로 볼 수 있다.

함수 스코프에서 암묵적 전역은 호이스팅인가?

암묵적 전역(implicit global)이란 함수 스코프에서 선언되지 않은 변수를 사용하면 레퍼런스 에러를 호출하는 것이 아닌, 전역 객체의 프로퍼티가 되어 전역 변수처럼 동작하는 현상이다. 이러한 현상은 함수 안에서 선언된 변수를 유효범위의 최상단으로 올려 선언 이전에도 사용할 수 있도록 하는 호이스팅과 비슷하게 보일 수 있다. 그러나 둘은 중요한 차이가 존재하는데, 암묵적 전역을 통해 사용하는 변수는 선언된 적이 없다는 점이다. 따라서 이러한 변수는 호이스팅의 대상이 될 수 없으며, 호이스팅 과 같은 개념도 아니다.

렉시컬 스코프란 무엇인가?

렉시컬(lexical)이란 '어휘적'이라는 뜻으로, 렉시컬 스코프는 함수의 호출이 아닌, 어디에서 함수를 선언하였는지에 따라 상위 스코프가 결정된다. 쉽게 말하면 '함수가 선언될 때 만들어지는 스코프'인 것이다. 렉시컬 스코프는 다른 말로 정적 스코프(Static scope)라고 부르기도 하며, 자바스크립트는 기본적으로 렉시컬 스코프를 따른다. 이러한 스코프의 반대는 동적 스코프(Dynamic scope)로, 함수의 호출에 따라 상위 스코프가 결정된다.

클로저란 무엇인가?

MDN에 따르면 클로저는 '함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)과의 조합'이다. 쉽게 말하면 클로저는 반환된 내부함수가 자신이 선언됐을 때의 환경(Lexical environment)인 스코프를 기억하여 자신이 선언됐을 때의 환경(스코프) 밖에서 호출되어도 그 스코프에 접근할 수 있는 함수를 말한다. 이를 더욱 간단히 말하면 클로저는 자신이 생성될 때의 환경(Lexical environment)을 기억하는 함수, 혹은 외부함수의 컨텍스트에 접근하는 내부함수라고 할 수 있다.

참고
poiemaweb.com - 스코프
poiemaweb.com - 클로저
MDN - 클로저

profile
코드를 디자인하다

0개의 댓글