๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ“บ Front End/- HTML,css,Javascript

[Javascript-Core] ์ „์—ญ ๊ณต๊ฐ„์—์„œ์˜ this (๋ถ€์ œ) ::JS์—์„œ ๋งํ•˜๋Š” This์— ์ •ํ™•ํ•œ ์˜๋ฏธ์™€ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ์˜ this(1)

by Wonit 2020. 7. 28.

์˜ค๋Š˜ ์•Œ์•„๋ณผ ๊ฒƒ์€ this์ด๋‹ค.


๋‚˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์ธ java๋ฅผ ๋จผ์ € ๋ฐฐ์› ๊ธฐ ๋•Œ๋ฌธ์— js์—์„œ ๋งํ•˜๋Š” this๋ฅผ ๋‹จ์ง€ class ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์—ญํ• ๋กœ์จ ์ดํ•ด๋ฅผ ํ–ˆ์—ˆ์ง€๋งŒ, js์—์„œ ๋งํ•˜๋Š” this๋Š” ํ›จ์”ฌ ๋‹ค์–‘ํ•˜๊ณ  ์‹ฌ์˜คํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.


์˜ค๋Š˜ ๊ทธ ์‹ฌ์˜คํ•œ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด์„œ ์งš์–ด๋ณด์ž.

 

ํ•ด๋‹น ๊ธ€์€ 4๋ถ€์ž‘์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. this์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์™„๋ฒฝํžˆ ํŒŒ์•…ํ•˜๊ณ ์‹ถ๋‹ค๋ฉด ํ•œ ๋ฒˆ ๋ด๋ณด๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

  1. ์ „์—ญ ๊ณต๊ฐ„์—์„œ์˜ this
  2. ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ์˜ this
  3. ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ์˜ this
  4. ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ์˜ this

What is this

w3cschool

 

์ตœ๋Œ€์˜ docs๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” w3c์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด this์˜ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฅ˜ํ•œ๋‹ค.

 

  • ๋ฉ”์„œ๋“œ์—์„œ this๋Š” ๊ทธ์˜ ์ฃผ์ธ ๊ฐ์ฒด(Owner Obj)๋ฅผ ๋œปํ•œ๋‹ค.
  • this๊ฐ€ ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉด ๊ทธ๊ฒƒ์€ global ๊ฐ์ฒด๋ฅผ ๋œปํ•œ๋‹ค.
  • ํ•จ์ˆ˜์—์„œ this๋Š” global ๊ฐ์ฒด๋ฅผ ๋œปํ•œ๋‹ค.
  • strict mode๊ฐ€ ์ ์šฉ๋œ ํ•จ์ˆ˜์—์„œ this๋Š” undefined์ด๋‹ค.
  • ์ด๋ฒคํŠธ์—์„œ this๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๋Š” element๋ฅผ ๋œปํ•œ๋‹ค.
  • call()๊ณผ apply() ๊ฐ™์€ ๋ฉ”์„œ๋“œ์—์„œ this๋Š” any object๋ฅผ ๋œปํ•œ๋‹ค.

๊ฐ๊ฐ์˜ ์˜ˆ๋ฅผ ํ†ตํ•ด์„œ ์กฐ๊ธˆ ์‰ฝ๊ฒŒ ์ดํ•ดํ•ด๋ณด์ž.

 

๋ชจ๋“  ์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•˜๋Š”๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค.

 

๋‹จ์ˆœํžˆ ์•”๊ธฐ๋ฅผ ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹น์žฅ์€ ํšจ๊ณผ์ ์ผ์ง€ ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜ ์–ธ์ œ ์–ด๋–ค ์–ธ์–ด๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ๋ผ์ง€๊ณ  ๋“ฑ์žฅํ• ์ง€ ๋ชจ๋ฅด๋Š” ํ˜„์žฌ์—๋Š” ์–ธ์–ด์˜ ์‚ฌ์šฉ๋ฒ•๋ณด๋‹จ ์ปดํ“จํŒ…์  ์‚ฌ๊ณ ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.


this์˜ ํŠน์„ฑ๊ณผ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ

js์—์„œ์˜ this๋Š” ์œ„์—์„œ ๋ดค๋“ฏ์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ๋‹ฌ๋ผ์ง„๋‹ค.

 

this๊ฐ€ ๊ฒฐ์ •๋˜๊ธฐ ์œ„ํ•ด์„  ์ง€๋‚œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ํฌ์ŠคํŒ…์—์„œ ์ด์•ผ๊ธฐ ํ–ˆ๋“ฏ์ด LexicalEnvironment์— thisBinding ๋˜๋Š” ์‹œ์ ์— ๊ฒฐ์ •๋œ๋‹ค.

 

๊ทธ ๋ง์€ ์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์‹คํ–‰๋˜๊ณ  ์ธํ„ฐํ”„๋ฆฌํŒ…์„ ํ•˜๋Š” ์ฒซ ์ˆœ๊ฐ„๋ถ€ํ„ฐ this๋Š” ์ •ํ•ด์ง€๊ฒŒ ๋˜๋Š”๋ฐ ๊ทธ ์ˆœ๊ฐ„์ด ๋ฐ”๋กœ ์ „์—ญ ๊ณต๊ฐ„์ด๋‹ค.

์ „์—ญ ๊ณต๊ฐ„์˜ this

์ „์—ญ ๊ณต๊ฐ„์˜ this๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ฐ”๋กœ ์ „์—ญ ๊ณต๊ฐ„ ์ž์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

์œ„์—์„œ ๋ง ํ–‡๋“ฏ์ด ์—”์ง„์ด ๋Œ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰๋˜๋Š” ์ฒซ ๋ฒˆ์งธ Execution ์ž์ฒด๊ฐ€ Global์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์‹คํ–‰ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ global์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ๊ฐ์ฒด๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

 

๋งŒ์•ฝ ๋‹น์‹ ์ด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ์ „์—ญ ๊ฐ์ฒด๋Š” window๊ฐ€ ๋  ๊ฒƒ์ด๊ณ , Nodejs ํ™˜๊ฒฝ์—์„œ ์—”์ง„์„ ๋Œ๋ฆฐ๋‹ค๋ฉด ์ „์—ญ ๊ฐ์ฒด๋Š” global์ด ๋œ๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•˜์ž.

 

๋‚˜๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ด์šฉํ•˜๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €์˜ this๋ฅผ ์ถœ๋ ฅ์‹œ์ผœ ๋ณด๊ฒ ๋‹ค.

์šฐ๋ฆฌ์˜ ์˜ˆ์ƒ๋Œ€๋กœ window๊ฐ€ ํ˜„์žฌ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” this๊ฐ€ ๋œ๋‹ค.

 

์œ„์—์„œ ๋ง ํ–ˆ๋˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ this์˜ ์ƒ๊ด€ ๊ด€๊ณ„๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋‹ค์Œ ์†Œ์Šค์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋‚ฉ๋“ ๊ฐ€๋Šฅํ• ํ…๋ฐ ํ•œ ๋ฒˆ ๋ด๋ณด์ž.

 

๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ƒํ•ด๋ณผ ์ˆ˜ ์žˆ์„๊นŒ?

  • ๋‚œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ชจ๋ฅด๊ฒ ๋‹ค.

๋งŒ์•ฝ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๊ด€ํ•ด ์•Œ์•„๋ณด์ง€๋ฅผ ๊ฐ€๋ณ๊ฒŒ ์ฝ๊ณ  ๋ฌผ ํ•œ์ž” ํ•˜๊ณ  ๋‹ค์‹œ ๋ด๋ณธ๋‹ค๋ฉด ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฒฐ๊ณผ๋Š” ๋ชจ๋‘ 10 10 10 ์ด ๋‚˜์˜จ๋‹ค.

์ด์œ ๋ฅผ ์ดํ•ดํ•ด๋ณด๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€๋งŒ ๋‹ค์‹œ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž

  1. ํ˜„์žฌ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด this
  2. ๋ธŒ๋ผ์šฐ์ €์—์„œ global์€ window

์ด์ œ ์ดํ•ด๊ฐ€ ๋์œผ๋ฆฌ๋ผ ๋ฏฟ๋Š”๋‹ค.

var a = 10; // ํ˜„์žฌ ์‹คํ–‰ ๋ฌธ๋งฅ์ธ window์— ๋ณ€์ˆ˜ a๋ฅผ ์ •์˜ํ•˜๊ณ  10์„ ํ• ๋‹น

console.log(a); // ํ˜„์žฌ ์‹คํ–‰ ๋ฌธ๋งฅ์— ์žˆ๋Š” window ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅ

console.log(window.a); // window ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅ

console.log(this.a); // ํ˜„์žฌ ์‹คํ–‰ ๋ฌธ๋งฅ์˜ ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅ

๋Œ“๊ธ€