스프린터스 #24 closure

HR.lee·2022년 4월 24일
0

스프린터스

목록 보기
24/25
  1. 클로저(closure)가 무엇인지 설명해보세요
  2. DOM을 건드리는 방식과 아닌 방식의 차이는 무엇인가요?
  3. 함수 scope와 블록 scope에 대해 설명해보세요
  4. Eslint, prettier에 대해 아는대로 설명해보세요
  5. CSS 박스 모델에 대한 얼마나 알고 있고 다른 박스 모델로 레이아웃을 렌더링하는 방법을 설명해보세요
  6. inline과 inline block의 차이점에 대해 설명해보세요

https://poiemaweb.com/js-closure

클로저는 자바스크립트에서 무척 중요한 개념이지만
자바스크립트 고유의 개념이 아니라 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 특성입니다.

클로저 : 함수와 그 함수가 선언됐을 때의 렉시컬 환경과의 조합

스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정된다. 이를 렉시컬 스코핑(Lexical scoping)이라 한다.

  • 예시
    함수 innerFunc는 함수 outerFunc의 내부에서 선언되었기 때문에 함수 innerFunc의 상위 스코프는 함수 outerFunc이다. 함수 innerFunc가 전역에 선언되었다면 함수 innerFunc의 상위 스코프는 전역 스코프가 된다.

자신을 포함하고 있는 외부함수보다 내부함수가 더 오래 유지되는 경우, 외부 함수 밖에서 내부함수가 호출되더라도 외부함수의 지역 변수에 접근할 수 있는데 이러한 함수를 클로저(Closure)라고 부른다.

말이 어렵지만 그냥 함수 안에 함수들을 넣어놓으면 전역변수를 설정하지 않고도 렉시컬 환경을 공유하는 함수들을 만들어서 두가지의 효과(연동과 보안)를 기대할 수 있는 개념이다.

전역변수의 값은 누군가에 의해 언제든지 변경될 수 있어 오류 발생의 근본적 원인이 될 수 있다. 상태 변경이나 가변(mutable) 데이터를 피하고 불변성(Immutability)을 지향하는 함수형 프로그래밍에서 사이드이펙트를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이기 위해 적극적으로 사용된다.

profile
It's an adventure time!

0개의 댓글