... << 으로 표현.
스프레드 문법은 배열을 합칠 때도 활용할 수 있다.
let arr = [3, 5, 1];
let arr2 = [8, 9, 15];
let merged = [0, ...arr, 2, ...arr2];
alert(merged); // 0,3,5,1,2,8,9,15 (0, arr, 2, arr2 순서로 합쳐집니다.)
환경레코드에 선언문이 다 담기는 것
매개변수 식별자(== 변수명), 함수 자체, var 선언된 변수 식별자들이 환경레코드에 담긴다.
let, const는 tdz에 의해 되지 않음. 참고문서 TOAST UI
Heap은 객체(참조)메모리 저장소다. (객체의 value값 저장소.)
?. << 으로 표현.
map()은 배열 메소드다.
case 1. 함수로 호출된 this는 기준이 없음.
그래서 최상위 객체인 window 객체를 반환할 수 밖에 없다.
(함수 이름은 내가 무엇을 가리켜야 하는지 모르기 때문)
case 2. this를 메소드로 호출한다면?
binding의 개념이 이 때 중요하게 결정된다.
메소드 안에서 this를 사용하게 되면, 내가 기준으로 잡을 수 있는 것은 window 객체가 아닌, 해당 메소드를 기준으로 잡을 수 있기 때문이다.
bind = v. 묶다; 라는 의미
콜백 함수도 함수이기 때문에 기본적으로 this가 전역객체(window)를 참조함.
함수와 메서드가 호출될 때, this는 각각 다르게 할당된다.
this는 실행 컨텍스트가 생성될 때 결정(this binding) === this는 함수를 호출할 때 결정
메서드로서 호출할 때, 그 메서드 내부에서의 this
- 기준 : 독립성
- 함수 : 그 자체로 독립적인 기능을 수행
- 메서드 : 자신을 호출한 대상 객체에 관한 동작을 수행.
. || []
// 메서드 내부에서의 this
var obj = {
methodA: function () { console.log(this) },
inner: {
methodB: function() { console.log(this) },
}
};
obj.methodA();
obj['methodA']();
// this === obj
// this === obj
obj.inner.methodB();
obj.inner['methodB']();
obj['inner'].methodB();
obj['inner']['methodB'](); // this === obj.inne
함수로서 호출할 때 그 함수 내부에서의 this는 호출의 주체를 명시할 수 없다.
즉, 함수로서 '독립적으로' 호출할 때는 this는 전역객체다.
메서드 내부함수에서의 this
메서드의 내부라고 해도, 함수로서 호출한다면 this는 전역객체.
⭐️ this 바인딩에 관해서는 함수를 실행하는 당시의 주변 환경(메서드 내부, 함수 내부)은 중요하지 않고, 오직 해당 함수를 호출하는 구문 앞에 점 또는 대괄호 표기가 있는지가 관건이다. ⭐️
⭐️ 유사 배열의 조건
- 반드시 length가 필요. 이 조건은 필수다. 없으면 유사배열이라고 인식하지 않음.
- index 번호가 0번부터 시작해서 1씩 증가해야함.
slice()함수는 배열로부터 특정 범위를 복사한 값들을 담고있는 새로운 배열을 만드는데 사용된다.
첫 번째 인자로 시작 인덱스(index), 두 번째 인자로 종료인덱스를 받음.
따로 인자를 넣어주지 않으면, 시작부터 끝까지 인덱스를 가지고온다.
- 화살표 함수의 예외사항
1. 화살표 함수는 실행 컨텍스트 생성 시, this를 바인딩하는 과정이 제외.
2. 화살표 함수 내부에는 this가 아에 없으며, 접근코자 하면 스코프체인상 가장 가까운 this에 접근하게 된다.
3. this 우회, call,apply,bind보다 편리한 방법임.
-> 화살표 함수를 쓰면, this를 binding하는 과정을 스킵할 수 있음.
정리 고생하셨습니다!!!