๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Personal_Study/Javascript

JavaScript์—์„œ์˜ This

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 11. 3.

This

๊ฐœ์š”

โœ” ์–ด๋– ํ•œ object๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ‚ค์›Œ๋“œ
โœ” JavaScript์˜ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋  ๋•Œ this๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์ „๋‹ฌ ๋ฐ›์Œ
โœ” JavaScript์—์„œ์˜ this๋Š” ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘
โœ” JavaScript๋Š” ํ•ด๋‹น ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋ฐฉ์‹์— ๋”ฐ๋ผ this์— ๋ฐ”์ธ๋”ฉ ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.
โœ” ์ฆ‰ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๊ฒฐ์ •

this INDEX

  1. ์ „์—ญ ๋ฌธ๋งฅ์—์„œ์˜ this
  2. ํ•จ์ˆ˜ ๋ฌธ๋งฅ์—์„œ์˜ this
  • ๋‹จ์ˆœ ํ˜ธ์ถœ
  • Method(๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋กœ์„œ)
  • Nested

์ „์—ญ ๋ฌธ๋งฅ์—์„œ์˜ this

โœ” ๋ธŒ๋ผ์šฐ์ €์˜ ์ „์—ญ ๊ฐ์ฒด์ธ window๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

  • ์ „์—ญ ๊ฐ์ฒด๋Š” ๋ชจ๋“  ๊ฐ์ฒด์˜ ์œ ์ผํ•œ ์ตœ์ƒ์œ„ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ
console.log(this) // window

ํ•จ์ˆ˜ ๋ฌธ๋งฅ์—์„œ์˜ this

  1. ๋‹จ์ˆœ ํ˜ธ์ถœ
  • ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • ์ „์—ญ์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” window, Node.js๋Š” global์„ ์˜๋ฏธํ•จ
  const myFunc = function() {
    console.log(this)
  }

  // ๋ธŒ๋ผ์šฐ์ €
  myFunc() // window

  // Node.js
  myFunc() // global
  1. Method (Function in Object, ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋กœ์„œ)
  • ๋ฉ”์„œ๋“œ๋กœ ์„ ์–ธํ•˜๊ณ  ํ˜ธ์ถœํ•œ๋‹ค๋ฉด, ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ์ด๋ฏ€๋กœ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ
  const myObj = {
    data: 1,
    myFunc() {
      console.log(this) // myobj
      console.log(this.data) // 1
    }
  }

  myObj.myFunc() // myObj
  1. Nested(Function ํ‚ค์›Œ๋“œ)
  • forEach์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ์˜ this๊ฐ€ ๋ฉ”์„œ๋“œ์˜ ๊ฐ์ฒด๋ฅผ ์นด๋ฆฌํ‚ค์ง€ ๋ชปํ•˜๊ณ  ์ „์—ญ ๊ฐ์ฒด window๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  • ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹Œ ๋‹จ์ˆœ ํ˜ธ์ถœ๋กœ ์‚ฌ์šฉ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ฒƒ์ด ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
  const myObj = {
    numbers: [1],
    myFunc() {
      console.log(this) //myObj
      this.numbers.forEach(function (number) {
      console.log(number) // 1
      console.log(this) // window)
    })
    }
  }
  1. Nested (ํ™”์‚ดํ‘œ ํ•จ์ˆ˜)
  • ์ด์ „์— ์ผ๋ฐ˜ function ํ‚ค์›Œ๋“œ์™€ ๋‹ฌ๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ๊ฐ์ฒด๋ฅผ ์ž˜ ๊ฐ€๋ฆฌํ‚ด
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ this๋Š” ์ž์‹ ์„ ๊ฐ์‹ผ ์ •์  ๋ฒ”์œ„
  • ์ž๋™์œผ๋กœ ํ•œ ๋‹จ๊ณ„ ์ƒ์œ„์˜ scope์˜ context๋ฅผ ๋ฐ”์ธ๋”ฉ
  const myObj = {
    numbers: [1],
    myFunc() {
      console.log(this) //myObj
      this.numbers.forEach((number) => {
      console.log(number) // 1
      console.log(this) // myObj)
    })
    }
  }

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

โœ” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ์˜ ์œ„์น˜์™€ ์ƒ๊ด€ ์—†์ด ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ด

โœ” Lexical scope

  • ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ํ˜ธ์ถœํ•˜๋Š”์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ์–ด๋””์— ์„ ์–ธํ•˜์˜€๋Š”์ง€์— ๋”ฐ๋ผ ๊ฒฐ์ •
  • static scope๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋”ฐ๋ฅด๋Š” ๋ฐฉ์‹
  • ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ํ•จ์ˆ˜๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ๊ฒƒ ๊ถŒ์žฅ

this์™€ addEventListener

โœ” However...

  • addEventListner์—์„œ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ํŠน๋ณ„ํ•˜๊ฒŒ function ํ‚ค์›Œ๋“œ์˜ ๊ฒฝ์šฐ addEventListner๋ฅผ ํ˜ธ์ถœํ•œ ๋Œ€์ƒ(event.tartet)๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • ๋ฐ˜๋ฉด ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ์ง€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— window ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค.

โœ” addEventListener์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” function ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ!

์ •๋ฆฌ

โœ” this๋Š” ํ˜ธ์ถœ๋˜๋Š” ์ˆœ๊ฐ„์— ๊ฒฐ์ •๋œ๋‹ค
โœ” ์žฅ์ 

  • ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ)๋ฅผ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด์„œ ์—ฌ๋Ÿฌ ๊ฐ์ฒด์—์„œ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ” ๋‹จ์ 

  • ์‹ค์ˆ˜๋กœ ์ด์–ด์ง€๊ธฐ ์‰ฝ๋‹ค

โœ” ์ข‹๊ณ  ๋‚˜์˜๊ณ ๋ฅผ ํŒ๋‹จํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ๋ฅผ ์ƒ๊ฐํ•˜์ž!!

'โญ Personal_Study > Javascript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ  (0) 2022.11.04
Callback & Promise  (0) 2022.11.04
Event  (0) 2022.11.02
JavaScript๋ฅผ ํ™œ์šฉํ•œ DOM ์กฐ์ž‘ ๊ธฐ์ดˆ  (0) 2022.11.02
DOM (Document Object Model)  (0) 2022.11.01

๋Œ“๊ธ€