3. Function( Scope Chain)
● Javascript에서는 Scope는 직관적으로 이해하기 쉽지 않다
● 함수에는 Scope 속성이 존재
● Scope 속성은 함수 생성과 관련된 객체의 참조 정보를 가진다.
● 이러한 객체의 참조 정보들을 Scope Chain이라고 한다
● 함수 생성 시 모든 함수는 하나의 Scope Chain 이 생성
● Scope Chain은 함수 호출과 관련된 여러 객체의 참조를 저장하는 메모리 공간
● 수 많은 함수의 호출로 이루어진 로직에서 각 함수 내의 변수 및 함수 호출이 어느 영
역을 참조 하는지에 대한 문제
4. Function( Scope Chain)
function A(v1, v2) {
return v1 + v2
}
[[scope]]
scope chain
0
Global Object
this
window
document
function
5. Function(Execution Context)
● 함수가 실행되는 환경을 정
의
function A(v1, v2) {
return v1 + v2
}
Execution Content
scope chain
0
1
Global Object
this
window
document
function
Activation Object
this
arguments
v1
v2
14. Closure
outer
Execution context
scope chain
0
1
Global Object
this window
window [object]
document [object]
outer function
Activation Object
this window
argument []
sum 2
inner
Execution context
scope chain
0
1
2
Activation Object
this window
argument []
15. Closure
● 함수의 상태는 실행이 종료 되며 소멸된다.
● Closure는 외부 함수의 상태를 [[scope]]속성으로 가
지고 있기 때문에 closure의 실행이 종료되기 전까지
외부 함수의 상태를 유지 한다.
16. Closure
outer
Execution context
scope chain
0
1
Global Object
this window
window [object]
document [object]
outer function
Activation Object
this window
argument []
sum 2
inner
Execution context
scope chain
0
1
2
Activation Object
this window
argument []
17. Object
● 기본적으로 제공되는 객체 = 내장 객체
● 사용자가 만들어 내는 객체 = 사용자 정의 객체
● 생성 방식
○ 함수를 통해서 이루어진다.
● 객체를 만들때 사용하는 함수
○ Object, Number, Function, JSON, Array…..
● 객체 생성 방식
○ 객체 리터럴을 이용한 간단한 객체 생성
○ 생성자
○ Object.create()
18. Object
● 객체 생성 방식
○ 객체 리터럴을 이용한 간단한 객체 생성
○ 생성자
○ Object.create()
● 장점
○ 별도 클래스 구조 없이 빠르게 객체 작
성
○ 객체 구성이 자유로움
○ 객체의 확장, 변경이 용이
● 단점
○ 객체 구조 파악이 어려움
○ 객체 구조 변경에 대비 해야함
○ 재상용이 불가능함
19. Object
● 객체 생성 방식
○ 객체 리터럴을 이용한 간단한 객체 생성
○ 생성자
○ Object.create()
● 장점
○ 같은 구조의 객체를 여러번 생산하는 것
에 유리
○ 문법적인 구조에 진입 장벽이 낮다
● 단점
○ 일반 함수와 생성자의 구분이 없다. 대
문자는 강제가 아니다
○ 같은 구조에는 적합, 하지만 유연함의
장점은 줄이게 된다
20. Object
● 객체 생성 방식
○ 객체 리터럴을 이용한 간단한 객체 생성
○ 생성자
○ Object.create()
● 장점
○ 존재하는 객체를 그대로 복사해서 다른
객체를 생산하는 경우
○ 상속구조를 사용하는데 있어서 편리한
방식
● 단점
○ 느린 속도
23. Object (객체 생성 방식의 차이)
● 클래스 기반
○ 클래스를 이용해 구조와 기능을 정의
○ 할당된 메모리 공간에 구조를 그대로 적용하여 동일 구조의 객체를 생성
○ 구조와 관계에 중점
● 프로토타입 기반
○ 객체라 불리는 인스턴스 기반 설계
○ 객체 생성후 해당 메모리 공간에 다양한 데이터와 기능을 주입하는 방식
○ 속성이나 데이터가 있는지만 중요
○ 따라서 공통된 속성이나 데이터의 주입방식을 고민
Prototype chain
30. Object (this)
● 기본적으로 this는 전역 객체를 참조한다.
● 메소드 내부의 this는 해당 메소드를 호출한 부모 객체를 참조한다.
● 생성자 함수 코드 내부의 this는 새로 생성된 객체를 참조한다.
● call()과 apply() 메소드로 함수를 호출할 때, 함수의 this는 첫 번째 인자로 넘겨받은 객체를 참조한다.
● 프로토타입 객체 메소드 내부의 this도 해당 메소드를 호출한 부모 객체를 참조한다.
● JavaScript의 this 키워드는 접근제어자 public 역할을 한다.
31. Object (prototype of Function)
● 모든 함수 객체는 자동으로 Prototype 속성이 존재
● prototype속성이 참조하는것은 ‘함수의 프로토타입(원형) 객체'
● 생성자 함수를 이용해 작성되는 객체들은 ‘함수의 프로토타입(원형) 객체'를 __proto__가 참조하
게 된다
fn1()
fn1()
프로토 타입객
체
prototype constructor