오늘 배운 것
1. 데이터 타입
-기본형과 참조형
-포인터 개념인듯하다
-깊은 복사와 얕은 복사
2. 실행컨텍스트
-코드에 제공할 환경 정보를 모은 객체
-호이스팅 -> VE, LE구성 -> this 바인딩
호이스팅
-컨텍스트와 관련된 코드의 식별자들을 수집한다.
-컨텍스트에서 사용되는 모든 식별자들의 선언을 코드 위로 땡겨온다.
-함수 선언은 전체를 호이스팅한다.
VariableEnvironment 와 LexicalEnvirionment
-record와 outer로 구성된다
-VE는 컨텍스트가 생성되는 시점의 LE의 스냅샷이다
this 바인딩
-js에서 this는 전역에서 사용할 수 있는 특수한 키워드이다.
-현재 컨텍스트의 스코프에 따라 this가 가리키는 대상이 다르다
-일반적으로 메서드로 호출되었다면 호출한 객체, 아니라면 전역 환경이 되지만, 명시적으로 this를 바인딩 할 수 있다
명시적 this 바인딩
-call 메서드
함수.call( ... ) 형태로 호출하며, 첫번째 매개변수로 this에 바인딩 할 객체를 전달한다.
-apply 메서드
call과 같지만, 바인딩 할 객체는 그대로 넣어주고 나머지는 배열 형태로 전달한다.
-유사배열객체
객체의 key를 0부터 시작하는 정수로 하고, length키를 추가함으로써 배열처럼 쓸 수 있다
//객체에는 배열 메서드를 직접 적용할 수 없어요.
//유사배열객체에는 call 또는 apply 메서드를 이용해 배열 메서드를 차용할 수 있어요.
var obj = {
0: 'a',
1: 'b',
2: 'c',
length: 3
};
Array.prototype.push.call(obj, 'd');
console.log(obj); // { 0: 'a', 1: 'b', 2: 'c', 3: 'd', length: 4 }
var arr = Array.prototype.slice.call(obj);
console.log(arr); // [ 'a', 'b', 'c', 'd' ]
es6에서는 Array.from 메서드를 통해 객체를 배열로 변환할 수 있다
-bind 메서드
call과 비슷하지만 즉시 호출하지는 않고 넘겨받은 this 및 인수들을 바탕으로 새로운 함수를 반환한다.