Shin-Yeonghwa / Core_JS

Core_JS
2 stars 0 forks source link

2.3 LexicalEnvironment #9

Open eunzy38 opened 4 years ago

eunzy38 commented 4 years ago

study 완료 후 체크 부탁드립니다.

dongggook commented 4 years ago
LexicalEnvironment
  • 처음엔 VariableEnvironment와 같지만 변경 사항이 실시간으로 반영된다.

실행컨텍스트와 코드의 실행과정

// ----------------------------(1)
let a = 1;
function outer() {
    function inner() {
        console.log(a); // undefined
        let a = 3;
    }
    inner(); // ---------------(2)
    console.log(a); // 1
}
outer(); // -------------------(3)
console.log(a); // 1
OHKuenYoung commented 4 years ago

2-3-1 environmentRecord와 호이스팅

호이스팅 규칙

변수 선언 부분을 먼저 실행

함수 선언문과 함수 표현식

함수 선언문 function 정의부만 존재하고 별도의 할당 명령이 없는 것

function a(){.....}

a();  //실행

함수표현식 정의한 function을 별도의 변수에 할당하는 것

var b = function() {...} // 익명 함수 표현식

b();  //실행

var c = function d() {..} //기명 함수 표현식

c()  //실행
d()  //에러

함수선언문과 함수 표현식의 차이 함수 선언문은 함수 전체를 호스팅하는 반면 함수 표현식은 변수 선언부만 호이스팅한다.

2-3-2 스코프, 스코프체인, outerEnvironmentReference

스코프 식별자에 대한 유효 범위 자바스크립트는 전역공간을 제외하면 함수에 의해서만 스코프 생성

스코프체인

전역변수와 지역변수

전역변수 전역공간에서 선언한 변수

지역변수 함수 내부에서 선언한 변수

Lee-Bom commented 4 years ago

2-3 LexicalEnvironment LexicalEnvironment 내부는 environmentRecord와 outer-environmentRecord로 구성

hyeonggyo commented 4 years ago

LexicalEnvironemnt

eunzy38 commented 4 years ago

environmentRecord와 호이스팅

호이스팅

변수와 함수(전체) 선언을 끌어올려 먼저 실행함

함수 선언문 & 함수 표현식

함수 선언문

함수 표현식

함수 선언문 vs 함수 표현식

함수 선언문은 함수 전체를 호이스팅 하는 반면, 함수 표현식은 변수 선언부만 호이스팅 함

스코프, 스코프체인, outerEnvironmentReference

스코프

식별자에 대한 유효범위 ES5까지의 자바스크립트는 전역공간을 제외하면 오직 함수에 의해서만 스코프가 생성됨

스코프 체인

전역변수 & 지역변수

전역변수 : 전역 공간에서 선언한 변수 지역변수 : 함수 내부에서 선언한 변수

KimHyeSeon commented 4 years ago

LexicalEnvironment

environmentRecord와 호이스팅

함수선언문과 함수 표현식

스코프

environmentRecord와 호이스팅

함수선언문과 함수 표현식

스코프

스코프 체인

전역변수

지역변수

this

hyeonggyo commented 4 years ago
jeonEK commented 4 years ago

LexicalEnvironment

1. environmentRecord와 호이스팅

함수 선언문과 함수 표현식

스코프, 스코프체인, OuterEnvironmentReference

전역변수와 지역변수

렉시컬 환경은 세가지 일을 한다. (VariableEnvironment도 동일) 1. Environmnet Records lexical environment 안에 함수와 변수를 기록한다.

2. Reference to the outer environment 외부 환경으로의 참조 값의 의미는 외부 lexical 환경으로 접근할 수 있다는 의미이다. 자바스크립트 엔진이 현재의 lexical environment에서 변수를 찾지 못했다면 외부 환경에서 해당 변수를 찾아 볼 수 있다는 의미이다.

3. This binding this의 값이 여기서 결정된다. 글로벌 실행 컨텍스트에서 this는 global object 이다. 함수 실행 컨텍스트에서는 this 값은 어떻게 함수가 호출되었는지에 따라 달라진다. 만약 함수가 object reference로 호출되었다면 this는 해당 객체를 가리키게 된다. 그렇지 않으면 this는 글로벌 객체(window)를 가리키거나 strict mode에서는 undefined를 가리키고 있다.