클로저
: 자바스크립트 고유의 개념 아님,렉시컬 스코프
: 자바스크립트 엔진은 함수를 어디서 호출했는지가 아니라 함수를 어디에 정의했는지에 따라 상위 스코프를 결정함,클로저
: 외부 함수보다 중첩 함수가 더 오래 유지되는 경우 중첩 함수는 이미 생명 주기가 종료한 외부 함수의 변수를 참조할 수 있고, 이때의 중첩 함수를 의미
-> 중첩 함수가 상위 스코프의 식별자를 참조하고 있고 중첩 함수가 외부 함수보다 더 오래 유지되는 경우에 한정하는 것이 일반적임
자유 변수
: 클로저에 의해 참조되는 상위 스코프의 변수
-> 클로저는 "함수가 자유 변수에 대해 닫혀있다" 라는 의미 (자유 변수에 묶여있는 함수)
자바스크립트 엔진은 최적화가 잘 되어 있어서 클로저가 참조하고 있지 않는 식별자는 기억하지 않음
-> 클로저의 메모리 점유는 필요한 것을 기억하기 위한 것
상태를 안전하게 변경하고 유지
하기 위해 사용함캡슐화
: 객체의 상태를 나타내는 프로퍼티와 프로퍼티를 참조하고 조작할 수 있는 동작인 메서드를 하나로 묶는 것
-> 정보 은닉 목적으로도 사용
정보 은닉
: 객쳬의 특정 프로퍼티나 메서드를 감출 목적으로 사용, 외부에 공개할 필요가 없는 구현의 일부를 감추어 적절치 못한 접근으로부터 객체의 상태가 변경되는 것을 방지해 정보를 보호, 객체 간의 상호 의존성인 결합도를 낮춤
=> 자바스크립트 객쳬의 모든 프로퍼티와 메서드는 기본적으로 외부에 공개되어 있음
-> 단 한 번 생성되는 클로저이기 때문에 문제 발생 (변수의 상태가 유지되지 않는 것)
자바스크립트는 정보 은닉을 완전하게 지원하지 않음
-> TC39 프로세서의 stage 3
에는 클래스의 private필드를 정의할 수 있는 새로운 표준 사양이 제안됨 (최신 브라우저, 최신 Node.js에 이미 구현 됨)## 24 클로저
클로저
: 자바스크립트 고유의 개념 아님,
함수와 그 함수가 선언된 렉시컬 환경과의 조합
렉시컬 스코프
: 자바스크립트 엔진은 함수를 어디서 호출했는지가 아니라 함수를 어디에 정의했는지에 따라 상위 스코프를 결정함,클로저
: 외부 함수보다 중첩 함수가 더 오래 유지되는 경우 중첩 함수는 이미 생명 주기가 종료한 외부 함수의 변수를 참조할 수 있고, 이때의 중첩 함수를 의미
-> 중첩 함수가 상위 스코프의 식별자를 참조하고 있고 중첩 함수가 외부 함수보다 더 오래 유지되는 경우에 한정하는 것이 일반적임
자유 변수
: 클로저에 의해 참조되는 상위 스코프의 변수
-> 클로저는 "함수가 자유 변수에 대해 닫혀있다" 라는 의미 (자유 변수에 묶여있는 함수)
자바스크립트 엔진은 최적화가 잘 되어 있어서 클로저가 참조하고 있지 않는 식별자는 기억하지 않음
-> 클로저의 메모리 점유는 필요한 것을 기억하기 위한 것
상태를 안전하게 변경하고 유지
하기 위해 사용함캡슐화
: 객체의 상태를 나타내는 프로퍼티와 프로퍼티를 참조하고 조작할 수 있는 동작인 메서드를 하나로 묶는 것
-> 정보 은닉 목적으로도 사용
정보 은닉
: 객체의 특정 프로퍼티나 메서드를 감출 목적으로 사용, 외부에 공개할 필요가 없는 구현의 일부를 감추어 적절치 못한 접근으로부터 객체의 상태가 변경되는 것을 방지해 정보를 보호, 객체 간의 상호 의존성인 결합도를 낮춤
=> 자바스크립트 객체의 모든 프로퍼티와 메서드는 기본적으로 외부에 공개되어 있음
-> 단 한 번 생성되는 클로저이기 때문에 문제 발생 (변수의 상태가 유지되지 않는 것)
자바스크립트는 정보 은닉을 완전하게 지원하지 않음
-> TC39 프로세서의 stage 3
에는 클래스의 private필드를 정의할 수 있는 새로운 표준 사양이 제안됨 (최신 브라우저, 최신 Node.js에 이미 구현 됨)
for 문의 변수 선언문에서 var
키워드로 선언하면 블록 레벨 스코프가 아닌 함수 레벨 스코프를 갖기 때문에 전역 변수
가 됨
-> let
이나 const
키워드 사용하기: 이는 코드 블록을 반복 실행할 때마다 새로운 렉시컬 환경
을 생성함
함수형 프로그래밍 기법인 고차 함수
를 사용하는 방법: 변수와 반복문의 사용을 억제할 수 있기 때문에 오류를 줄이고 가독성을 좋게 만듦
for 문의 변수 선언문에서 var
키워드로 선언하면 블록 레벨 스코프가 아닌 함수 레벨 스코프를 갖기 때문에 전역 변수
가 됨
-> let
이나 const
키워드 사용하기: 이는 코드 블록을 반복 실행할 때마다 새로운 렉시컬 환경
을 생성함
함수형 프로그래밍 기법인 고차 함수
를 사용하는 방법: 변수와 반복문의 사용을 억제할 수 있기 때문에 오류를 줄이고 가독성을 좋게 만듦