TIL 23/05/25

비니·2023년 5월 25일

NEW

this(정의, 활용방법, 바인딩, all, apply, bind)

(1) 함수를 호출할 때 결정된다.
(2) 전역공간에서는 전역객체를 가리키고, 런타임 환경에 따라 window 또는 global을 가리킨다.
(3) 함수로서 '독립적으로' 호출할 때는 메서드의 내부라고 해도 항상 전역객체를 가리킨다.
->화살표 함수를 이용해 this binding 과정을 없앨 수 있다.
(4) 콜백 함수도 함수다. 예외는 있다)
(5) 생성자 함수에서는 계속 바뀔 수 있다.


var getAged = function (user, passedTime) {
    var newUser = user;
    newUser.age += passedTime;
}

자바스크립트에서 객체는 값을 직접 저장하지 않고 별도의 공간을 따로 두고 그 주소를 가져온다. 즉. 참조형을 쓰고 있기 때문에 user === newUser가 된다.
따라서 객체를 순회하면서 아예 새로운 객체를 만들어야 한다.

// 객체 만들어 프로퍼티 복사하기
var getAged = function (user, passedTime) {
    var result = {};
    for (var prop in user) {
        result[prop] = user[prop];
    }
    result.age += passedTime; 
    return result;
}

예제 30제

// 아래 함수는 배열을 입력받아서 배열 요소들 중 truthy한 요소들만 필터링하여 반환합니다.
// Truthy 란 boolean type을 기대하는 문맥에서 true 로 평가되는 값을 의미합니다.
// for문과 if문을 이용하여 작성해 보세요.

function getTruthyArray(arr) {
  const truthyArr = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i]) { // arr[i]가 true면 실행한다.
      truthyArr.push(arr[i]);
    }
  }

  return truthyArr;
}

const result = getTruthyArray([-1, 0, "", {}, [], null, undefined, NaN]);
console.log(result); // 출력 결과: [-1, {}, []]

처음에 push로 넣지 않고 바로 콘솔에 출력했더니 return truthyArr; 때문에 []배열이 한번 더 출력됐다.
그래서 push로 truthyArr 배열에 결과값을 넣었음.
엄청 오랫동안 풀었다^^


profile
👩‍💻

0개의 댓글