let 키워드 변수 중복 선언 금지. 블록 레벨 스코프 변수 호이스팅 let 키워드로 선언한 변수는 변수 호이스팅이 발생하지 않는 것처럼 동작한다. 하지만 이는 아니다. let foo = 1; { console.log(foo) //Referenc Error let foo - 2; } b. 변수 호이스팅이 발생하여 위와 같은 결과가 나타난다. let 키워드로 선언한 변수는 “선언 단계”와 “초기화 단계”가 분리되어 진행된다. 스코프의 시작지점 부터 초기화 지점까지 변수를 참조할 수 없는 부분을 TDZ(Temporal Dead Zone)이라 한다. var 키워드로 선언한 전역변수, 전역 함수, 암묵적 전역은 전역 객체 window의 프로퍼티가 된다. 하지만 let 키워드로 선언한 전역 변수는 전역 객체의 프..
변수의 생명주기 변수는 호이스팅에 의해 가장 먼저 실행된다 전역 변수가 아닌 지역 변수일 경우, 함수가 실행된 직후 먼저 실행이 된다. 즉 지역 변수의 생명 주기는 함수의 생명 주기와 같다. 하지만 지역 변수가 함수보다 오래 생존하는 경우도 있다. 변수의 생명 주기는 메모리 공간의 확보 > 메모리 공간이 해체 > 가용 메모리 풀에 반환 되는 시점을 말한다. 따라서 변수는 자신이 등록된 스코프가 소멸(메모리 해체)될 때 까지 유효하다. 할당된 메모리 공간은 더 이상 그 누구도 참조하지 않을 때 가비지 콜렉터에 의해 해체> 가용 메모리 풀에 반환된다. 아래의 내용을 이해하자. var x = 'global' function foo(){ console.log(x); var x = 'local' } foo(); ..
스코프는 프로그래밍 언어의 기본 개념. 식별자 자신을 참조할 수 있는 유효한 범위 스코프 체인 중첩 함수와 같이 지역 스코프도 중첩될 수 있다. (지역이 곧 함수 몸체를 말하고, 지역은 지역 스코프를 만들기 때문) 모든 스코프는 하나의 계층적 구조로 연결 되어있다. 최상위 스코프는 전역 스코프다. 참조하는 코드의 스코프에서 시작하여 상위 스코ㅡ로 이동하면서 선언된 변수를 검색한다. 스코프 체인은 실행 컨텍스트의 렉시컬 환경을 단방향으로 연결한 것이다. 전역 렉시컬 환경은 코드가 로드되면 곧바로 생성되고 함수의 렉시컬 환경은 함수가 호출되면 곧바로 생성된다. 함수도 식별자에 할당되기 때문에 변수를 검색할 때 사용하는 규칙 보다는 식별자를 검색하는 규칙이 좀 더 적합 함수 레벨 스코프 대부분의 프로그래밍 언..