23일 차 회고
컨테스트의 구성방법
1. 전역공간 (자동부여)
2. eval()함수
3. 함수(우리가 흔히 실행컨텍스트를 구성하는 방법)
실행컨텍스트에 담기는 정보
- VariavleEnvironment
- 현재 컨텍스트 내의 식별자 정보
- 외부 환경 정보
- 선언 시점 LexicalEnviroment의 snapshot
- LexicalEnviroment
- VariavleEnvironment 와 동일 변경사항이 실시간으로 반영
- ThisBinding
- this 식별자가 바라봐야할 객체
function a (x) {
console.log(x);
var x ;
console.log(x);
var x = 2;
console.log(x);
}
//
function a () {
var x = 1; // 매개변수 할당
console.log(x);
var x ;
console.log(x);
var x = 2;
console.log(x);
}
a();
//
function a () {
var x;
var x;
var x;
x = 1;
console.log(x); // 1
console.log(x); // 1
x = 2;
console.log(x); // 2
}
a();
function a () {
console.log(b);
var b = 'bbb';
console.log(b);
function b () {};
console.log(b);
}
a();
//변수의 경우 정의부만 호이스팅 되지만, 함수는 함수 전체가 호이스팅 된다.
function a () {
var b;
function b () {};
console.log(b); // f b () {}
b = 'bbb';
console.log(b); // bbb
console.log(b); // bbb
}
a();
함수표현식의 선언이 호출보다 위에 있는 경우 - 정상 출력
함수표현식의 선언이 호출보다 아래에 있는 경우 (var 변수에 할당) - TypeError
함수표현식의 선언이 호출보다 아래에 있는 경우 (const/let 변수에 할당) - ReferenceError
console.log(sum(1,2))
console.log(multyply(3,4));
//함수 선언문
function sum (a,b){
return a+b
}
//함수표현식
var multiply = function (a,b) {
return a + b
}
- outer는 현재 호출된 함수가 선언될 당시의 LexicalEnvironment를 참조
- ex) a함수 내부에 b함수 선언 -> b함수 내부에 c함수 선언(Linked List)
- 전역 컨텍스트의 LexicalEnvironment를 참조
- 무조건 스코프 체인 상에서 가장 먼저 발견된 식별자에게만 접근이 가능
var a = 1;
var outer = function(){
var inner = function (){
console.log(a);
var a = 3;
}
inner();
console.log(a);
}
outer();
console.log(a)
어제 하루도 너무 고생하셨습니다!