호이스팅(22.10.05TIL)
스파이럴 매트릭스를 풀던 도중 함수의 인자로 전달된 변수의 불변성이 깨지는 것을 확인하고, 이에 대한 내용이 궁금해서 홀맨님과 석태님에게 도움을 받았다.
call by value
자바에서도 원시타입을 전달하면 값을 복사해서 내용을 처리한다는 것은 알고 있었지만, 실제로 그게 변수 선언의 키워드까지 영향을 주는지는 모르고 있었다. 분명 const로 선언한 변수인데 왜 고칠수가 있지??하는 생각이 들었는데, 매개변수로 전달된 변수는 키워드가 기본적으로 할당되지 않는다고 한다. 음.. 적고나서 생각해봤는데, 아직 잘 이해가 가지 않는다. 그러면 키워드가 없는 값도 존재할 수 있는건가?
오늘 목표로 세운 일들을 먼저한다고 제대로 조사해보지 못했는데, 내일 마저 조사하고 다시 질문해야할 듯 하다.
호이스팅
석태님이 알려준 실행 컨텍스트에는 자바스크립트의 독특한 내용이 많이 들어가 있었다. 조금 난해한 내용이라 제대로 이해한 지는 모르겠지만 실행 컨텍스트에는 VariableEnvironment, LexicalEnvironment, ThisBinding로 구성되고 전역 컨텍스트나 함수마다 각각의 컨텍스트를 가질수 있다는 사실이다. 이중 LexicalEnvironment의 environmentRecord에는 현재 컨텍스트에 코드의 식별자들이 저장된다. 그 내용은 다음과 같다.
- 함수 내 매개변수에 대한 식별자
- 함수 자체의 식별자
- 함수 내부의 식별자
이 부분도 정확히 이해는 안되지만 전역 실행 컨텍스트는 변수 객체 대신 전역 객체를 활용하기 때문에 자바스크립트 엔진은 이미 실행 컨텍스트에 속한 변수명들을 모두 알게 된다고 한다.
그래서 엔진의 실제 동작 방식 대신에 엔진은 식별자들을 최상단으로 끌어올려놓은 다음, 실제 코드를 실행한다. 라고 생각해도 코드 해석에 문제되는 것이 없다. (실제로 끌어올리는 것은 아님.) 이걸 호이스팅이라고 부른다.
사실 이걸 해서 무슨이득이 있고 어디에 쓰는지 아직은 잘 이해가 되지 않지만, 배운 내용을 내 코드에 한번 적용해보려고 한다.
액션플랜
1. 아직까지 실행 컨텍스트에 대한 내용이 정확히 이해되지 않아서 내일 더 공부해 본 후 질문채널에 진짜 모르는 부분을 다시 질문해보려 해보기
2. 홀맨님이 답변해준 키워드가 할당되지 않는 변수에 대해서 다시 고민해보기