koans 복습
알게된 점
- 임의의 객체 obj에 obj.length는 undefined를 return한다.
- object method는 객체의 속성으로 정의된 함수.
- this는 method를 호출한 시점에 method를 호출한 객체
array.porototype.slice : 얕은 복사(중첩 구조 복사 X)
Spread Operator(펼침 연산자) : 얕은 복사(중첩 구조 복사 X)
Object.assign : 얕은 복사(중첩 구조 복사 X)
JSON.parse(JSON.stringify(arr)) : 깊은 복사는 아니지만 깊은 복사하는 방식처럼 보인다. (중첩 구조 복사 O)
깊은 고찰
spread syntax를 통한 rest parameter는
function getAllParamsByRestParameter(...args) {
return args;
}
typeof 시 'object'
Array.isArray() 시 true
arguments를 통해 함수의 인자를 다룰 경우는
function getAllParamsByArgumentsObj() {
return arguments;
}
typeof 시 'object'
Array.isArray() 시 false
Array.isArray()에서 두가지의 경우는 차이를 보이지만,
둘 다 Object.keys() / Object.values()를 사용 가능.
arguments를 통해 함수의 인자를 다룰 경우 Array.isArray()에서 false를 return함을 알 수 있었지만,
이것도 Array.from()을 통해 배열로 만들 수가 있으며 이 경우 Array.isArray()에서 true를 리턴하게 만든다.
이와중에 또 궁금한게 생겨났다.
위 spread syntax로 그리고 arguments로 함수를 만들어 그 결과값을 변수에 담아주고 그 변수를 리턴했을 때의 값에 차이(callee)가 있었는데 그게 무엇인지 보자.
const restParams = getAllParamsByRestParameter('first', 'second', 'third');
restParams
(3) ["first", "second", "third"]
const argumentsObj = getAllParamsByArgumentsObj('first', 'second', 'third');
argumentsObj
Arguments(3) ["first", "second", "third", callee: ƒ, Symbol(Symbol.iterator): ƒ]
//callee와 Symbol은 무엇일까.
argumentsObj.length
3
//callee와 Symbol은 length에 포함되지 않음을 알 수 있다.
callee
callee는 arguments 객체의 속성입니다.
그 함수의 몸통(body)({}) 내에서 현재 실행 중인 함수를 참조하는 데 쓰일 수 있습니다. 이는 함수의 이름을 알 수 없는 경우에 유용합니다, 가령 이름 없는 함수 식(또한 "익명 함수"라 함) 내에서.
function create() {
return function(n) {
if (n <= 1)
return 1;
return n * arguments.callee(n - 1);
};
}
var result = create()(5); // 반환값 120 (5 * 4 * 3 * 2 * 1)
//예시는 MDN을 참고하였습니다.
나머지 예시들은 너무 어려웠는데 이 예시만은 이해할 수 있었다.
여기서 arguments.callee(n-1)은 함수 create가 리턴하는 익명함수 인 것이다.
(그러므로 n이 1과 같아질 때까지 순환하는 구조가 된다. 마치 반복문 같다.)
koans를 통해 알게된 부족한 점
객체를 그래도 조금은 안다고 생각했지만 객체에 대한 이해가 적었음.
spread문법과 rest문법에 대한 이해가 적었음.
배열과 객체에서의 destructing assignment를 비교해 봐야함.
미리 맛본 고차함수 :
함수를 리턴하는 함수(혹은 화살표를 연달아 쓴다면)
중복되는 부분과 다른 부분들 중 다른부분은 매개변수로 바꾸고 함수가 함수를 리턴하는 방식으로 바꾼다면
고차함수를 통해서 중복을 제거할 수 있다.
'개인공부' 카테고리의 다른 글
2021년 5월 9일 클래스를 이용한 모듈화, 프로토 타입 예습 (0) | 2021.05.09 |
---|---|
2021년 4월 25일 TIL(호이스팅(Hoisting), spread/rest) (0) | 2021.04.25 |
2021년 4월 18일 TIL(코플릿에서 의미 도출, 배열 예습) (0) | 2021.04.18 |
2021년 4월 10일 TIL (JS/Node 복습, coplit 깊은 탐구) (0) | 2021.04.10 |
[Javascript] callback 함수 (0) | 2021.04.06 |