자바스크립트 call, apply, bind 설명

2020. 10. 27. 14:56·개발/JavaScript

call과 apply 메소드는 기본적으로 함수를 호출하는 역할을 합니다. 그렇다면 기존 함수 호출과 차이점은 무엇일까요? 바로 해당 메소드를 사용해 함수를 '실행'하면, 함수의 첫 번째 인자로 전달하는 객체에 this 를 '바인딩'할 수 있다는 것입니다. 이를 통해 유사 배열 arguments 객체에 배열 메서드를 사용할 수 있습니다. 반면, bind는 첫 번째 인자를 this에 바인딩하지만 함수를 '실행하지 않으며', 새로운 함수를 반환합니다.

 

call

call을 사용하면 함수를 실행하고 함수의 첫 번째 인자로 전달하는 값에 this를 바인딩합니다.

function logName (a, b, c) {
  console.log(this.name);
  console.log(a + b + c);
}

const person = {
    name: 'Hwi'
};

logName.call(person, 1, 2, 3);
// Hwi 
// 6

apply

apply을 사용하면 함수를 실행하고 함수의 첫 번째 인자로 전달하는 값에 this를 바인딩합니다. call과의 차이점이라면 인자를 배열의 형태로 전달한다는 것입니다. 이때, 인자로 배열 자체가 전달하는 것이 아니라 배열의 요소들이 값으로 전달됩니다.

function logName (a, b, c) {
  console.log(this.name);
  console.log(a + b + c);
}

const person = {
    name: 'Hwi'
};

logName.apply(person, [1, 2, 3]);
// Hwi
// 6

bind

bind는함수의 첫 번째 인자에 this 를 바인딩한다는 점은 같지만, 함수를 실행하지 않으며 새로운 함수를 반환합니다. 즉, 반환된 새로운 함수를 실행해야 원본 함수가 실행됩니다.

function logAge (a, b, c) { // 원본 함수
  console.log(this.age);
  console.log(a + b + c);
}

const person = {
    age: 31
};

const myAge = logAge.bind(person, 1); // 새로운 함수

myAge(2, 3);
// 31
// 6

마치며

call 메소드는 함수를 실행하고, 첫 번째 인자에 this 를 바인딩하며, 이후의 값을 함수의 인자로 전달합니다. bind 메소드는 함수를 실행하고, 첫 번째 인자에 this 를 바인딩하며, 이후의 값을 배열의 형태로 받아 차례로 함수의 인자로 전달합니다. bind 메소드는 함수를 실행하지 않으며, 첫 번째 인자에 this를 바인딩한 새로운 함수를 반환합니다. 각 메소드를 통해 전달할 수 있는 인자의 갯수에는 제한이 없습니다.

저작자표시 비영리 변경금지 (새창열림)

'개발 > JavaScript' 카테고리의 다른 글

객체 지향 프로그래밍이란?  (0) 2020.10.29
자바스크립트 this 의 개념과 바인딩 설명  (0) 2020.10.25
자바스크립트 객체 생성자 함수란?  (0) 2020.10.24
'개발/JavaScript' 카테고리의 다른 글
  • 자바스크립트 프로토타입이란?
  • 객체 지향 프로그래밍이란?
  • 자바스크립트 this 의 개념과 바인딩 설명
  • 자바스크립트 객체 생성자 함수란?
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발 N
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git N
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
자바스크립트 call, apply, bind 설명
상단으로

티스토리툴바