자바스크립트 클로저,this

이수연·2022년 12월 20일
0

자바스크립트

목록 보기
14/19

클로저

=>내부 함수가 외부 함수보다 생명 주기가 길 때 내부 함수에서 외부함수 변수를 참조하는 경우를 클로저라한다.

장점
함수의 실행이 끝나도 내부 변수를 유지할 수 있다.
함수 안에서 closure가 만들어지면, 내부 변수가 메모리에 남아 closure에 활용됩니다.

쓰는이유?
정보은닉과 캡슐화 이점을 얻을수 있다 //직접적인 변수 접근을 막을수 있다.

렉시컬환경
자바스크립트는 함수를 어디서 호출했는지가 아니라 어디에 정의했는지에따라 상위 스코프를 정의하고 이를 렉시컬 환경이라한다.

this

this는 자신이 속한 객체혹은 자신이 생성할 인스턴스 를 가리키는 자기 참조변수이다.

this는 자바스크립트 엔진에 의해 암묵적으로 생성된다.
this가 가르키는값 즉 this 바운딩은 함수 호출방식에의해 동적으로 생성된다.

함수 호출 방식

1. 일반 함수 호출
=> 일반함수 호출시 함수내부의 this에는 전역 객체가 바인딩 된다.
2. 매서드 호출
=> 매서드를 호출한 객체에 바인딩된다.
매서드는 다른 객체에 할당하는것으로 다른객체의 매서드가 될수 있고 일반변수에 할당하여 일반 함수로 호출될수 있다.
3. 생성자 함수 호출
=>생성자 함수 내부의 this에는 생성자 함수가 생성할 인스턴스가 바인딩된다.
4. function.prototype.apply/bind/call 매서드에의한 간접 호출
=>모두 prototype 메서드로, 모든 함수가 상속받아 사용할수 있다.

fn() // 1. 함수 자체로 호출할때는 this가 window
obj.fn()
2. 오브젝트의 메소드(함수가 오브젝트가 가지는 property인 경우)로 호출하는 경우 this는 호출에 쓰인 obj
new fn()
3. new 키워드를 써서 constructor(생성자)로 사용했을 경우 this 는 생성중인 객체

클래스의 인스턴스: 속성,프로퍼티,어트리뷰트 함수, 매소드(오브젝트가가지는함수)

인스턴스란?

붕어빵기계에서 붕어빵을 찍어내듯 비슷한 성질을 가진 여러개의 객체를 만들기 위해, 일종의 설계도라고 할 수 있는 생성자 함수(Constructor)를 만들어 찍어내듯 사용하는데 이렇게 생성된 객체를 인스턴스라 부른다.

0개의 댓글