Javascript Study

call, apply, bind

2020. 10. 18. 22:56
๋ชฉ์ฐจ
  1. ๐Ÿ“Œ ๋ชฉ์ฐจ
  2. ๐Ÿ“Œ Introduction
  3. ๐Ÿ“Œ What is call?
  4. ๐Ÿ“Œ What is apply?
  5. ๐Ÿ“Œ What is bind?
  6. ๐Ÿ“Œ Usage
  7. ๐Ÿ“Œ Conclusion
  8. ๐Ÿ“ŒReference
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ๋ชฉ์ฐจ

  • Introduction
  • What is call?
  • What is apply?
  • What is bind?
  • Usage
  • Conclusion
  • Reference

๐Ÿ“Œ Introduction

์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ฐ€์žฅ ํ—ท๊ฐˆ๋ฆฌ๋Š” call, apply, bind์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ What is call?

๋จผ์ € call์„ ์ •์˜ํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ์˜ˆ์ œ๋ฅผ ๋ด์ฃผ์„ธ์š”.

const example = (a, b, c) => {
  console.log(a + b + c);
};
example(1, 2, 3); // 6
example.call(null, 1, 2, 3); // 6

example์„ ์‹คํ–‰์‹œํ‚จ ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ example.call๋„ ๋˜‘๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ˆˆ์น˜๋ฅผ ์ฑ„์‹ ๋ถ„๋„ ์žˆ๊ฒ ์ง€๋งŒ call์˜ ์ฒซ๋ฒˆ ์งธ ์ธ์ž ๋’ค์—๋Š” example์— ๋“ค์–ด๊ฐ€๋Š” ์ธ์ž๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด null์€ ๋ฌด์—‡์ผ๊นŒ์š”? ์ •๋‹ต์€ ๋ฐ”๋กœ this๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

const obj1 = {
  name: 'eddie',
  greeting: function () {
    console.log(`Hi, ${this.name}`);
  },
};

const obj2 = {
  name: 'claire',
};

obj1.greeting(); // Hi, eddie
obj1.greeting.call(obj2); // Hi, claire

์ด๋ ‡๊ฒŒ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ this๋ฅผ ๋Œ€์ฒด ์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ What is apply?

apply๋„ call๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const example = (a, b, c) => {
  console.log(a + b + c);
};
example.apply(null, [1, 2, 3]); // 6

call๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” this๋ฅผ ๋Œ€์ฒดํ•˜๋Š”๊ฒƒ์ด๊ณ  call๊ณผ ๋‹ค๋ฅธ์ ์€ ๋‘๋ฒˆ์งธ ์ธ์ž์— array๋กœ example์— ๋“ค์–ด๊ฐ€๋Š” ์ธ์ž๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

const obj1 = {
  name: 'eddie',
  greeting: function () {
    console.log(`Hi, ${this.name}`);
  },
};

const obj2 = {
  name: 'claire',
};

obj1.greeting.apply(obj2); // Hi, claire

๐Ÿ“Œ What is bind?

๊ทธ๋ ‡๋‹ค๋ฉด bind๋Š” ๋ญ˜๊นŒ์š”? call๊ณผ apply ์ฒ˜๋Ÿผ this๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค๋Š” ์ ์—์„  ๊ฐ™์ง€๋งŒ ์‹คํ–‰์„ ์‹œ์ผœ์ฃผ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ํ•œ๋ฒˆ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const obj1 = {
  name: 'eddie',
  greeting: function () {
    console.log(`Hi, ${this.name}`);
  },
};

const obj2 = {
  name: 'claire',
};

const greetingClaire = obj1.greeting.bind(obj2);
greetingClaire(); // Hi, claire

์ด ์ฒ˜๋Ÿผ call๊ณผ apply๋Š” ๋ฐ”๋กœ ์‹คํ–‰์„ ์‹œ์ผœ์ฃผ๋Š” ๋ฐ˜๋ฉด bind๋Š” this๋งŒ ๋ฐ”๊ฟ”์ค€ ํ˜•ํƒœ๋กœ return์„ ์‹œ์ผœ์ค๋‹ˆ๋‹ค.

๐Ÿ“Œ Usage

call, apply, bind๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ๋„ ์‘์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

function example2() {
  console.log(arguments.join()); // error;
}

์œ„์˜ ์ฝ”๋“œ๋Š” arguments๊ฐ€ ์œ ์‚ฌ ๋ฐฐ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ์ ์œผ๋กœ๋Š” ๋ฐฐ์—ด์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ call์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ฌ๋ผ์ง€์ฃ .

function example2() {
  console.log(Array.prototype.join.call(arguments));
}

example2('eddie', 2, true); // eddie,2,true

๐Ÿ“Œ Conclusion

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ž์ฃผ ์“ฐ์ด์ง€๋Š” ์•Š์ง€๋งŒ context๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” call, apply, bind์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. this๋ผ๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ๊นŒ๋‹ค๋กญ๊ธฐ ๋–„๋ฌธ์— ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ŒReference

  • ์ œ๋กœ์ดˆ
๋ฐ˜์‘ํ˜•

'Javascript Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Proxy  (0) 2020.10.26
Reduce์— ๋Œ€ํ•œ ๊ณ ์ฐฐ  (2) 2020.07.24
  1. ๐Ÿ“Œ ๋ชฉ์ฐจ
  2. ๐Ÿ“Œ Introduction
  3. ๐Ÿ“Œ What is call?
  4. ๐Ÿ“Œ What is apply?
  5. ๐Ÿ“Œ What is bind?
  6. ๐Ÿ“Œ Usage
  7. ๐Ÿ“Œ Conclusion
  8. ๐Ÿ“ŒReference
'Javascript Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Proxy
  • Reduce์— ๋Œ€ํ•œ ๊ณ ์ฐฐ
eddie0329
eddie0329
Front-end Developer
๋ฐ˜์‘ํ˜•
eddie0329
Eddie Sunny's Blog
eddie0329
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (100)
    • Summary of Book (0)
    • Vue Study (11)
    • Vue TDD (9)
    • Vue BDD (5)
    • Design Pattern (9)
    • Javascript Study (3)
    • React Study (15)
    • React TDD (1)
    • Vue Storybook (2)
    • Refactoring (0)
    • Graphql_Apollo (3)
    • Svelte (8)
    • Open Source (1)
    • D3 (4)
    • Typescript (1)
    • CSS (2)
    • Android (0)
    • Java (0)
    • Kotlin (0)
    • ์žก๋‹ด (0)
    • Swift (19)
    • Rust (2)
    • ํšŒ์‚ฌ์ด์•ผ๊ธฐ (2)
    • ReactNative Study (2)
    • Vitest (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • Home

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • vue tdd
  • swift
  • Design Pattern
  • Javascript
  • svelte
  • Kotlin
  • Vue
  • TDD
  • react useRef
  • Cypress
  • swift5
  • vue3
  • react-component-slot
  • apollo
  • storybook6
  • React Native
  • javascript pattern
  • Nextjs
  • D3
  • Vue test
  • vue cypress
  • BDD
  • jest
  • TypeScript
  • client only
  • slot ํŒจํ„ด
  • vue storybook
  • CSS
  • react
  • vue bdd

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
eddie0329
call, apply, bind
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.