정리시간입니다.
269
buriburi
10 asked
6
var book = {
value: 123,
get: function(){
var value = 456;
console.log(this === window);
console.log(this.value);
}
};
var fn = book.get;
fn();
// true
// undefined
- strict 모드 환경이 아님
- 함수 선언문이 없다.
- 변수 초기화를 한다
- book: undefined
- fn: undefined
- 코드를 실행한다.
book = {
value: 123,
get: function(){}
}
- fn() 함수 호출 (book.get()을 실행)
- fn() 함수는 글로벌 함수이고, 함수 이름만 작성하여 호출 가능.
- 이때, 실행 콘텍스트를 생성하고, this 바인딩 컴포넌트에 window가 바인딩된다.
- this는 window를 참조하게 된다.
- 또한 글로벌 오브젝트를 windonw 오브젝트가 참조함
- book.get 함수 안으로 들어감
- 함수 내부에 함수 선언문이 없다.
- 변수 초기화
- value: undefined
- 코드 실행
- value: 456가 설정
- console.log(this === window); 는 true를 출력
- console.log(this.value)에서도 this가 window를 참조
- window 즉, 글로벌 오브젝트에는 value라는 프로퍼티 이름을 가진 프로퍼티가 존재하지 않아서 undefined를 출력
- 여기서 console.log(value)를 하면 456
- console.log(book.value)를 하면 123
- console.log(window.value)를 하면 undefined가 출력되는 것을 알 수 있음
실행 콘텍스트: {
렉시컬 환경 컴포넌트: {
환경 레코드: {
book: Object,
fn: function(){}
},
외부 렉시컬 환경 참조 {}
},
변수 환경 컴포넌트: {},
this 바인딩 컴포넌트: {
this: window
}
}
(get) 실행 콘텍스트: {
렉시컬 환경 컴포넌트: {
환경 레코드: {
value: 456,
},
외부 렉시컬 환경 참조: {
value: 123,
}
},
변수 환경 컴포넌트: {},
this 바인딩 컴퍼넌트: {
this: book
}
}
function getTitle(){
console.log("HTML");
};
var book = function(){
function getTitle(){
console.log("JS");
};
this.getTitle();
getTitle();
};
book();
// HTML
// JS
- strict 모드 환경이 아님
- 함수 선언문을 만나 getTitle function 오브젝트 생성
- 변수 초기화를 한다
- book: undefined
- 코드를 실행한다.
getTitle: function(){}
book: function(){}
- book() 함수 호출
- book() 함수는 글로벌 함수이고 호출되면서 실행 콘텍스트를 생성하고 this 바인딩 컴포넌트에 window를 참조
- this는 window를 참조하게 된다.
- 또한 글로벌 오브젝트를 windonw 오브젝트가 참조함
- book 함수 내부로 들어감
- 함수 선언문 getTitle을 만나서 function 오브젝트 생성
- getTitle은 렉시컬 환경 컴포넌트의 환경 레코드에 설정
- 함수 표현식과 변수가 없어서 변수 초기화는 패스
- 코드 실행
- this.getTitle() 함수를 호출할 때, this는 window를 참조함
- window 즉, 글로벌 오브젝트에 getTitle이라는 프로퍼티 이름을 검색
getTitle: function(){
console.log("HTML");
}
book: function(){
getTitle: function(){}
}
- getTitle이 존재하므로 함수 실행
- console에 HTML 출력
- 다시 book 함수 내부의 getTitle();를 만나서 호출
- 환경 레코드에서 getTitle이 존재하여 실행
- console에 JS 출력
실행 콘텍스트: {
렉시컬 환경 컴포넌트: {
환경 레코드: {
book: function(){},
getTitle: function(){}
},
외부 렉시컬 환경 참조 {}
},
변수 환경 컴포넌트: {},
this 바인딩 컴포넌트: {
this: window
}
}
(getTitle) 실행 콘텍스트: {
렉시컬 환경 컴포넌트: {
환경 레코드: {},
외부 렉시컬 환경 참조 {
book: function(){}
}
},
변수 환경 컴포넌트: {},
this 바인딩 컴포넌트: {
this: window
}
}
(book) 실행 콘텍스트: {
렉시컬 환경 컴포넌트: {
환경 레코드: {
getTitle: function(){}
},
외부 렉시컬 환경 참조 {
getTitle: function(){}
}
},
변수 환경 컴포넌트: {},
this 바인딩 컴포넌트: {
this: window
}
}
(getTitle) 실행 콘텍스트: {
렉시컬 환경 컴포넌트: {
환경 레코드: {},
외부 렉시컬 환경 참조 {
getTitle: function(){}
}
},
변수 환경 컴포넌트: {},
this 바인딩 컴포넌트: {
this: book
}
}
javascript
Answer 0
getBook 실습 예제중 질문드립니다!
0
419
1
__proto__ 에 대해 질문드립니다
0
315
1
호이스팅 코딩시간 풀이
0
358
1
[코딩 시간] JS {name: value} 이해
0
340
1
[[Scope]] 와 [[Environment]]는 같은 개념인가요
0
345
0
slice
0
239
0
스코프가 뭔가요?
0
307
0
어려워요
0
255
0
강사님 변수이름에 get을 붙이는 이유를 알고싶습니다.
0
339
1
[정리 시간] 정확하게 이해했는지 확인 부탁드립니다.
0
300
0
스코프 질문
0
253
1
fn 함수와 book.get 함수 차이 질문드립니다...ㅠㅠㅠ
1
542
1
this binding 논리 질문입니다.
0
279
1
파라미터 값을 매핑할 때
0
251
0
ES6부터는 this 바인딩을 환경 레코드에서 참조한다고 들었습니다.
0
209
0
정리시간 입니다.
0
228
0
정리 시간 입니다.
0
203
0
정리시간입니다.
6
227
0
코딩시간 입니다.
1
222
0
선생님 스코프 질문이 있습니다.
1
240
0
[정리시간] 해보았습니다!
0
175
0
선생님 질문있습니다!!
0
159
0
질문드려도 될까요 선생님..
0
217
0
엔진이 식별자 해결을 위해서 스코프를 사용한다고 하셨는데
0
185
0

