this๐Ÿ“๐Ÿ“๐Ÿ“๐Ÿ“๐Ÿ“

roadzmoon76ยท2022๋…„ 1์›” 25์ผ
0

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
3/6

๐Ÿ“˜ this ๋ž€?

  • ๋‚ด๊ฐ€ ๋งํ• ๋•Œ์˜ '๋‚˜'์™€ ์นœ๊ตฌ๊ฐ€ ์ž๊ธฐ์–˜๊ธฐ๋ฅผ ํ• ๋•Œ์˜ '๋‚˜'๋Š” ํ‘œํ˜„์€ ๊ฐ™์ง€๋งŒ ๋‚˜ํƒ€๋‚ด๋Š”๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค. ์ด์™€ ๋น„์Šทํ•˜๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ‘œํ˜„์€ ๊ฐ™์ง€๋งŒ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฐ’์ด๋‹ค.

  • this ๋Š” ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด ๋˜๋Š” ์ž์‹ ์ด ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ž๊ธฐ ์ฐธ์กฐ ๋ณ€์ˆ˜๋‹ค. this ๋ฅผ ํ†ตํ•ด ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด ๋˜๋Š” ์ž์‹ ์ด ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿคท ๊ฐ’์ด ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •๋˜๋‚˜?

  • this๋Š” ํ•ด๋‹น ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋ƒ์— ๋”ฐ๋ผ ๊ฐ’์ด ๊ฒฐ์ •๋œ๋‹ค. ์ฆ‰ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„์•ผ this ๊ฐ’์˜ ํŒ๋‹จ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • this ๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ๊ฐ’, ์ฆ‰ this ๋ฐ”์ธ๋”ฉ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์— ์˜ํ•ด ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.

    ๋ฐ”์ธ๋”ฉ์ด๋ž€ ์‹๋ณ„์ž์™€ ๊ฐ’์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค. this ๋ฐ”์ธ๋”ฉ์€ this์™€ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ ๊ฐ์ฒด๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฐฉ์‹์€ ์–ด๋–ป๊ฒŒ ์žˆ๋‚˜?

1. ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ

Regular function call์ด๋ผ๊ณ ๋„ ํ•จ. ๊ทธ๋ƒฅ ํ•จ์ˆ˜๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž„.

function zmoon () {
  console.log(this);
}

zmoon();

๊ทธ๋ƒฅ ๋ณ„๋‹ค๋ฅผ๊ฒƒ ์—†์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์ž„.
์ด๋Ÿด๊ฒฝ์šฐ this๋Š” global object๋กœ ์ •ํ•ด์ ธ ์žˆ๋‹ค.
global object๋ž€ ์†Œ๋ฆฌ๋Š” ๋งŒ์•ฝ ๋ธŒ๋ผ์šฐ์ €์ƒ์—์„œ ์ž์Šค๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค๋ฉด window ๊ฐ์ฒด๋ผ๋Š” ์†Œ๋ฆฌ๋‹ค.

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

2. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ(Dot notation : ์  ๋ฐฉ์‹)

ํ•จ์ˆ˜๋ฅผ ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ํ• ๋‹นํ•˜์—ฌ ํ˜ธ์ถœ. . ์•ž์—์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ this์˜ ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด ์‹คํ–‰๋จ

๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ this๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ธฐ ๋•Œ๋ฌธ

3. Function.prototype.call/apply/bind ๋ฉ”์„œ๋“œ์— ์˜ํ•œ ๊ฐ„์ ‘ ํ˜ธ์ถœ

ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ค์ •ํ•ด๋†“์€ this๊ฐ’(์ธ์ˆ˜)์ด this๊ฐ’์œผ๋กœ ์„ค์ •๋จ.
call์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ์ธ์ž์˜ ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ์žˆ์ง€์•Š์•„์„œ ์šฐ๋ฆฌ๊ฐ€ ๋„˜๊ฒจ์ฃผ๊ณ ์‹ถ์€๋Œ€๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด ๋จ
apply๋Š” ํ•ญ์ƒ ์ธ์ž๋ฅผ ๋‘๊ฐœ๋งŒ ๋ฐ›์Œ
bind๋Š” ๋ฐ”๋กœ ์‹คํ–‰์€ ์•ˆ๋˜๊ณ  this๊ฐ’๋งŒ ์„ค์ •์„ ํ•ด์คŒ

4. ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ํ˜ธ์ถœ('new' keyword)

new๋ฅผ ๋ถ™์—ฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, this์—๋Š” ์ƒˆ๋กœ์šด ๋นˆ ๊ฐ์ฒด๊ฐ€ ์ง€์ •๋ผ์„œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
๋˜ํ•œ new๋ฅผ ์จ์„œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ ํ•จ์ˆ˜์— return์ด ์—†์—ˆ๋”๋ผ๋„, return this ์ฝ”๋“œ๊ฐ€ ์•Œ์•„์„œ ์‹คํ–‰๋œ๋‹ค
new๋ฅผ ์จ์„œ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋“ค์„ ๋ณดํ†ต Constructor function (์ƒ์„ฑ์ž ํ•จ์ˆ˜) ๋ผ๊ณ ํ•จ. ๋˜ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์„ฑ์žํ•จ์ˆ˜๋Š” ๋ณดํ†ต ์ฒซ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋ฅผ ํ‘œ๊ธฐํ•ด์คŒ

์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค๋ผํ•จ. ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ this๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฅดํ‚ด

etc

eventhandler์— this๋ฅผ ์“ฐ๋Š”๊ฑด ๋งค์šฐ ๋น„์ถ”์ฒœํ•จ
๋‹ค๋ฅธ ๋™๋ฃŒ ํŒ€์› ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋งค์šฐ ๋ฏผํ์ž„
this๋Š” ๊ทธ ์ž์ฒด๋กœ ๋งค์šฐ ๋ถˆํ™•์‹ค์„ฑ์ด ๋†’์€ ์ธ์ž๋ผ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์„œ ์จ์•ผํ•จ

์ฐธ๊ณ 

https://youtu.be/ayyuU0xdbIU

์ •๋ฆฌ

๋ช…์‹œ์  this ๋ฐ”์ธ๋”ฉ์ด ์—†๋Š” ํ•œ ๋Š˜ ์„ฑ๋ฆฝ

  • ์ „์—ญ๊ณต๊ฐ„์—์„œ์˜ this๋Š” ์ „์—ญ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ(๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” window, Node.js๋Š” global)
  • ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋กœ์„œ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ this๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ฃผ์ฒด(๋ฉ”์„œ๋“œ๋ช… ์•ž์˜ ๊ฐ์ฒด)๋ฅผ ์ฐธ์กฐ
  • ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ this๋Š” ์ „์—ญ๊ฐœ์ฒด๋ฅผ ์ฐธ์กฐ. ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€ํ•จ์ˆ˜์—์„œ๋„ ๋™์ผ.
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ์˜ this๋Š” ํ•ด๋‹น ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์ •์˜ํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉฐ, ์ •์˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ „์—ญ๊ฐœ์ฒด ์ฐธ์กฐ.
  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜์—์„œ this๋Š” ์ƒ์„ฑ๋  ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐ.

๋ช…์‹œ์  this ๋ฐ”์ธ๋”ฉ

  • call, apply ๋ฉ”์„œ๋“œ๋Š” this๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋ฉด์„œ ํ•จ์ˆ˜ ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ
  • bind ๋ฉ”์„œ๋“œ๋Š” this ๋ฐ ํ•จ์ˆ˜์— ๋„˜๊ธธ ์ธ์ˆ˜๋ฅผ ์ผ๋ถ€ ์ง€์ •ํ•ด์„œ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ฌ
  • ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•˜๋Š” ๋‚ด์šฉ์˜ ์ผ๋ถ€ ๋ฉ”์„œ๋“œ๋Š” ๋ณ„๋„์˜ ์ธ์ž๋กœ this๋ฅผ ๋ฐ›๊ธฐ๋„ ํ•จ

์ฝ”์–ด์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฐธ๊ณ 

profile
ํฌ๋ก ๋ณ‘๊ฑธ๋ฆฐ ์žํ‡ด์ƒ, ๊ฐœ๋ฐœ์ž๋˜๊ธฐ

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