๐Ÿ“’ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(Arrow function)

zooyahoยท2022๋…„ 8์›” 7์ผ
0
post-thumbnail

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ this๊ฐ€ ์ „์—ญ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์•ˆ์œผ๋กœ ์œ ์šฉํ•˜๋‹ค.
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” non-constructor์ด๋‹ค.
  • ์ค‘๋ณต๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์„ ์–ธํ•  ์ˆ˜ ์—†๋‹ค.
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ž์ฒด์˜ this, arguments, super, new.target ๋ฐ”์ธ๋”ฉ์„ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.

1๏ธโƒฃ this

  • this๋ฐ”์ธ๋”ฉ์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋ฐฉ์‹, ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.
  • ์ผ๋ฐ˜ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœ๋˜๋Š” ๋ชจ๋“  ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this๋Š” ์ „์—ญ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • ์ฝœ๋ฐฑํ•จ์ˆ˜์—๋„ strict mode๊ฐ€ ์ ์šฉ๋˜์–ด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœ๋œ ๋ชจ๋“  ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this์—๋Š” ์ „์—ญ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ undefined๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค!!
    ๐Ÿ”ฅ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ž์ฒด์˜ this๋ฐ”์ธ๋”ฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ this๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ทธ๋Œ€๋กœ ์ฐธ์กฐํ•œ๋‹ค.
    ๐Ÿ‘‰๐Ÿป ์Šค์ฝ”ํ”„ ์ฒด์ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ƒ์œ„ ํ•จ์ˆ˜ ์ค‘์—์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ํ•จ์ˆ˜์˜ this๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํ•จ์ˆ˜์—๋Š” this ๋ฐ”์ธ๋”ฉ์ด ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•œ๋‹ค.

๐Ÿ‘พ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ

function Person(name) {
  this.name = name;
  this.sayHi = function () {
    setTimeout(() => {
      console.log(`${this.name} Hi~!`);
    }, 1000);
  };
}
const me = new Person("Lee");
me.sayHi(); // Lee Hi~!

๐Ÿ‘‰๐Ÿป this๊ฐ€ ์ƒ์œ„ ์Šค์ฝ”ํ”„์— ๋ฐ”์ธ๋”ฉ๋˜์–ด Person์„ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ Person.name = 'Lee'

๐Ÿ‘พ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ

function Person(name) {
  this.name = name;
  this.sayHi = function () {
    setTimeout(function () {
      console.log(`${this.name} Hi~!`);
    }, 1000);
  };
}
const me = new Person("Lee");
me.sayHi(); // Hi~!

๐Ÿ‘‰๐Ÿป this๊ฐ€ ์ „์—ญ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ window.name = ''

2๏ธโƒฃ Rest ํŒŒ๋ผ๋ฏธํ„ฐ

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ๋Š” arguments ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ arguments ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์ž์‹ ์—๊ฒŒ ์ „๋‹ฌ๋œ ์ธ์ˆ˜ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๊ฐ€๋ณ€ ์ธ์ž ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๋•Œ๋Š” RestํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋“ค์˜ ๋ชฉ๋ก์„ ๋ฐฐ์—ด๋กœ ์ „๋‹ฌ ๋ฐ›๋Š”๋‹ค!
  • ์ผ๋ฐ˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค!
  • RestํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋‹จ ํ•˜๋‚˜๋งŒ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์„ ์–ธํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ length ํ”„๋กœํผํ‹ฐ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
function foo(param, ...rest) {
  console.log(param); // 1
  console.log(rest); // [2,3,4]
}
foo(1, 2, 3, 4);
console.log(foo.length); // 1

์ฐธ๊ณ  ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive 16์žฅ

profile
์ฆ๊ฒ๊ฒŒ ๊ฐœ๋ฐœํ•˜์ž ์ฅฌ์•ผํ˜ธ๐Ÿ‘ป

0๊ฐœ์˜ ๋Œ“๊ธ€