[Javasciprt] (ES6) Arrow Function์˜ this

ES6 ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ถˆํŽธํ•จ์„ ๋ชป ๋Š๋ผ๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ

์ž‘์—…์„ ํ•˜๋˜ ๋„์ค‘ Arrow Function this์˜ ์˜๋ฏธ๊ฐ€ ๊ธฐ์กด๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

์—ฌ๊ธฐ์„œ function ๊ฐ์ฒด์˜ call ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด this๊ฐ’์€ ํ˜ธ์ถœํ•œ Object๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

function() ์‚ฌ์šฉ

// function() ์‚ฌ์šฉ
function function1() {
  console.log(this.name);
  return {
    name: 'ํ™๊ธธ๋™',
    getName: function () {
      // ์—ฌ๊ธฐ์„œ์˜ this๋Š” ์ž์‹ ์˜ Object๋‚ด์— this๋ฅผ ๊ฐ€๋ฅดํ‚ด
      console.log(this.name);
    },
  };
}

function1.call({ name: '์†ํฅ๋ฏผ' }).getName();
// ์†ํฅ๋ฏผ
// ํ™๊ธธ๋™

Arrow Function ์‚ฌ์šฉ

// Arrow Function ์‚ฌ์šฉ
function function2() {
  console.log(this.name);
  return {
    name: 'ํ™๊ธธ๋™',
    //* arrow function์€ ์ž์‹ ์„ ํฌํ•จํ•˜๋Š” ์™ธ๋ถ€ scope์—์„œ this๋ฅผ ๊ณ„์Šน๋ฐ›๋Š”๋‹ค.
    //์ฆ‰, arrow function์€ ์ž์‹ ๋งŒ์˜ this๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. (Lexical this)
    getName: () => {
      console.log(this.name);
    },
  };
}

function2.call({ name: '์†ํฅ๋ฏผ' }).getName();
// ์†ํฅ๋ฏผ
// ์†ํฅ๋ฏผ

์•„์ง ์‹ค๋ฌด์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋ฉด ์ข‹์„์ง€๋Š” ๊ฐ์ด ์˜ค์ง„ ์•Š์ง€๋งŒ ๊ทธ๋ž˜๋„ ํ˜น์—ฌ๋‚˜ ES6 ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์—… ์‹œ

์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์ธ์‹ํ•˜๊ณ  ์žˆ์œผ๋ฉด ์ž์‹ ์ด ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฝ”๋”ฉ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค.

๋‹ค๋ฅธ ๊ธ€ ์ฝ์–ด๋ณด๊ธฐ โฌ‡๏ธ