์ค๋ ์์๋ณผ ๊ฒ์ this
์ด๋ค.
๋๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ธ java๋ฅผ ๋จผ์ ๋ฐฐ์ ๊ธฐ ๋๋ฌธ์ js์์ ๋งํ๋ this๋ฅผ ๋จ์ง class ๋ด๋ถ์ ํ๋กํผํฐ์ ๋ํ ํฌ์ธํฐ์ญํ ๋ก์จ ์ดํด๋ฅผ ํ์์ง๋ง, js์์ ๋งํ๋ this๋ ํจ์ฌ ๋ค์ํ๊ณ ์ฌ์คํ ๊ธฐ๋ฅ์ ์ํํ๊ณ ์์๋ค.
์ค๋ ๊ทธ ์ฌ์คํ ๊ธฐ๋ฅ๋ค์ ๋ํด์ ์ง์ด๋ณด์.
ํด๋น ๊ธ์ 4๋ถ์์ผ๋ก ๋๋์ด์ ธ ์์ต๋๋ค. this์ ๋ํ ๋ชจ๋ ๊ฒ์ ์๋ฒฝํ ํ์ ํ๊ณ ์ถ๋ค๋ฉด ํ ๋ฒ ๋ด๋ณด๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
- ์ ์ญ ๊ณต๊ฐ์์์ this
- ๋ฉ์๋ ๋ด๋ถ์์์ this
- ํจ์ ๋ด๋ถ์์์ this
- ์ฝ๋ฐฑ ํจ์์์์ this
What is this
์ต๋์ 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 ์ด ๋์จ๋ค.
์ด์ ๋ฅผ ์ดํดํด๋ณด๊ธฐ ์ํด ๋ ๊ฐ์ง๋ง ๋ค์ ์ง๊ณ ๋์ด๊ฐ์
- ํ์ฌ ์คํ ์ปจํ ์คํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ด this
- ๋ธ๋ผ์ฐ์ ์์ global์ window
์ด์ ์ดํด๊ฐ ๋์ผ๋ฆฌ๋ผ ๋ฏฟ๋๋ค.
var a = 10; // ํ์ฌ ์คํ ๋ฌธ๋งฅ์ธ window์ ๋ณ์ a๋ฅผ ์ ์ํ๊ณ 10์ ํ ๋น
console.log(a); // ํ์ฌ ์คํ ๋ฌธ๋งฅ์ ์๋ window ๋ณ์๋ฅผ ์ถ๋ ฅ
console.log(window.a); // window ๋ณ์๋ฅผ ์ถ๋ ฅ
console.log(this.a); // ํ์ฌ ์คํ ๋ฌธ๋งฅ์ ๋ณ์๋ฅผ ์ถ๋ ฅ
๋๊ธ