
실행환경→매개변수→외부변수까지 참조하여
함수를 정의하는 순간 global 실행 context에 값만 저장이 됨
자바스크립트의 함수는 값이다
함수는 선언할때가 아니라 실행할때 Function Execution Context가 생성
→ 또한 , 매개변수, 함수 안의 함수는 함수 안의 메모리 상에 적재되는데 메모리도 실행해야 생성됩니다


let,const는 TDZ에 들어감→ undefined(선언은 됐지만 값이 할당이 되지 않은 상태)
함수를 선언하게 되면 매개변수, 함수안에 함수들 함수 안 메모리상에 적재되는데, 정의되는 순간 메모리가 생성하는 게 아니라 함수의 실행컨텍스트는 실행하는 순간 생성되기 때문에 context상 메모리가 생성됨
함수의 실행이 종료되면, 가지고 있던 모든 실행환경의 메모리는 제거됨⇒ garbage collector가 수집해감
개발자는 garbage collector에 접근하지 못합니다
단순히 접근을 하지 못해서 에러가 아니라 애초에 등록되지 않아서 걍 없어요 !
let userName = 'John';
function showMessage() {
userName = "Bob"; // (1) 외부 변수를 수정함
let message = 'Hello, ' + userName;
alert(message);
}
alert( userName ); // 함수 호출 전이므로 John 이 출력됨
showMessage();
alert( userName );
함수 내에서 선언한 message는 사라졌지만 외부 변수의 값을 변경함
밖에서 선언하고 함수 내에서 재할당하는 방식은 위험할 수 있음
외부변수에 참조하고 값은 변경하는 것은 모듈화시 위험할 수 있습니다 : )
→ 인자로 받아서 return으로 바꿔주는 것이 좋아요

찐파랑: global execution ~ | 하늘색: function execution~