스코프 함수란 객체 콘텍스트 내에서 속성 초기화나 활용과 같은 특정 동작을 수행하기 위한 목적을 가진 함수이다. 람다 표현식을 사용하여 스코프 함수를 호출하면 임시 스코프가 활성화 되는데 이 때 해당 스코프 내에서는 객체의 이름으로 일일이 참조할 필요 없이 객체를 access하고 handle할 수 있다.
다음과 같은 5가지 scope function이 존재한다.
- apply
인스턴스를 생성하고 변수에 할당하기 전에 초기화 작업을 해주는 스코프를 형성
apply 함수에서 모든 명령이 수행되면 명령들이 적용된 새로운 인스턴스를 반환함.
- run
apply와 다르게 인스턴스를 반환하는 것이 아니라 스코프 내부에서 명령 실행 결과 값을 반환
이미 생성된 인스턴스를 활용한 특정 계산 결과값을 필요로 하는 경우 사용함.(인스턴스 프로퍼티 출력등의 핸들링)
- with
run과 똑같다. 다만 사용하는 방식이 다름. run은 function with reciever, with은 아님
A.run { ... } <-> with(A) { ... }
- also
apply와 마찬가지로 생성된 인스턴스를 반환
하지만, it 키워드 제공함. -> 동명의 변수 참조 방지
- let
run과 마찬가지로 최종 실행 결과를 반환
하지만, it 키워드 제공함. -> 동명의 변수 참조 방지
also/let은 apply/run과 다르게 it 키워드를 제공하여 특정 객체 컨텍스트 내부에서 특정 동작을 실행하게 한다.