첫문장은 모든 걸 쏟아 부어서 간결하고 명료하게. 추가로 물어볼 수 없게 만들자. 만약 추가 질문이 들어온다면 예상하여 맞받아치자.
배열, 객체는 참조 자료형입니다. 참조 자료형을 변수에 할당하면, 메모리 공간에 주소값만 저장하고 참조 자료형의 값은 heap이라는 저장공간에 따로 저장됩니다. 즉, 메모리 공간에 있는 주소값은 변경할 수 없는 상수 상태이지만 heap에 저장된 값은 변경이 가능합니다.
참조 자료형은 원시 자료형과 다르게 크기가 일정하지 않습니다. 배열, 객체의 크기가 큰 상태에서 요소나 속성들을 메모리에 하나하나 저장하게되면, 메모리 효율성이 떨어집니다. 따라서 참조 자료형을 변수에 선언, 할당할 때 heap 저장 공간에 값을 저장합니다.
스코프는 "변수 접근 규칙에 따른 유효범위"를 말합니다. 보통은 중괄호를 기준으로 구분이 됩니다.
첫번째 규칙은, 중괄호를 기준으로 안쪽 스코프에서 바깥쪽 스코프로는 접근할 수 있지만 바깥쪽 스코프에서 안쪽 스코프에 존재하는 변수에는 접근할 수 없다는 것입니다.
두번째 규칙은 스코프는 중첩이 가능하다는 것입니다. 가장 바깥쪽 스코프는 전역 스코프라고 불리고 어느 스코프에서도 사용가능하다는 것입니다.
세번째 규칙은 지역변수는 전역변수보다 더 높은 우선순위를 가집니다. 같은 변수명으로 할당을 해도 지역 스코프에서는 지역 변수가 사용된다는 것입니다.
함수와 함수가 선언된 어휘적 환경의 조합입니다. 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성됩니다.
클로저의 함수는 어디에서 호출되느냐에 무관하게 선언된 함수 주변 환경에 따라 접근할 수 있는 변수가 정해지기 때문에 스코프와 다릅니다.
"외부 함수"변수에 접근 할수 있는 "내부 함수"라고 표현하기도 합니다.
머리로는 알고 있는데 생각을 정리해서 입 밖으로 꺼내는 것이 어려웠다.
이제는 머리로는 알고 있지만 설명을 못하면, 그것도 모른다는 생각을 해야겠다.
한 줄로 간단명료하게 설명하는 연습을 해보자.