# this
this๋ ํจ์์ ์คํ ์ปจํ ์คํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ์์ฝ์ด์ ๋๋ค. ์ฌ๊ธฐ์ ์คํ ์ปจํ ์คํธ๋ ์ฌ์ ์ ์ธ ์ ์๋ก 'ํจ์๊ฐ ์คํ๋๋ ํ๊ฒฝ'์ด๋ฉฐ ์ข ๋ ์ฝ๊ฒ ์ ๊ทผํ๊ธฐ ์ํด์๋ 'ํจ์๊ฐ ์คํ๋ ๋์ ์ปจํ ์คํธ'๋ก ์ดํดํ์๋ ๊ฒ ์ข๊ฒ ์ต๋๋ค.
๋ค๋ฅธ ์ธ์ด์ ๋ค๋ฅด๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ์ this๋ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ๋ค์ ๊ฐ๋ฅดํต๋๋ค. ์ด ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์กฐ๊ธ ์ด๋ ต๊ฒ ๋๊ปด์ง๋ ๋ถ๋ถ๋ ์์ต๋๋ค.
์ฌ๊ธฐ์๋ this๊ฐ ๊ฐ์ฅ ๋ง์ด ํ์ฉ๋๋ ์ํฉ๋ค์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
# ์ฒซ ๋ฒ์งธ this
์๋์ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์ฝ์์์ ์คํํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
console.log(this); // window
this์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ปจํ ์คํธ๋ ๊ธ๋ก๋ฒ(์ ์ญ) ์ปจํ ์คํธ์ ๋๋ค. ์ฌ๊ธฐ์ ์ถ๋ ฅ๋ window๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ต์์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
# ๋ ๋ฒ์งธ this
์๋์ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
var obj = {
num: 10,
printNum: function() {
console.log(this.num);
}
};
์ฌ๊ธฐ์ obj.printNum()
์ ์คํํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
obj.printNum(); // 10
๊ฐ์ฒด ์์ฑ ํจ์ ์์์์ this๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
# ์ธ ๋ฒ์งธ this
์ธ ๋ฒ์งธ๋ก ์ดํด๋ณผ this๋ ๋จผ์ ํจ์ ์ ์ธ๋ฌธ, ์์ฑ์ ํจ์๋ฅผ ์์์ผ ํฉ๋๋ค. ํน์ ์์ง ๊ฐ๋ ์ด ๋ฏ์ ๋ถ๋ค์ ๋งํฌ๋ฅผ ํด๋ฆญํด์ ๊ฐ๋จํ๊ฒ ์ดํด๋ณด์๊ณ ๊ณ์ ์ฝ์ด๋๊ฐ์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
์ ๊ทธ๋ผ ์ผ๋ฐ ํจ์(ํจ์ ์ ์ธ๋ฌธ)์์์ this๋ ์ด๋ค ๊ฒ์ ๊ฐ๋ฆฌํฌ๊น์?
function showComment() {
console.log(this);
}
์ ํจ์๋ฅผ ์๋์ ๊ฐ์ด ์คํ์ํค๋ฉด window
๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ์ผ๋ฐ ํจ์์ this๋ ์ ์ญ ์ปจํ
์คํธ์
๋๋ค.
showComment(); // window
๊ทธ๋ผ ์ด๋ฒ์ ์์ฑ์ ํจ์์ this๋ฅผ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
function Developer() {
console.log(this);
}
var dev = new Developer();
์ ์ฝ๋๋ ์คํํ์๋ง์ ๋ฐ๋ก ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์์ ์ถ๋ ฅํฉ๋๋ค.
Developer {}
๊ทธ ์ด์ ๋ new
๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ์๊ฐ ํจ์๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ ์ ์๋ ์ฌ์ค์ ์์ฑ์ ํจ์์ this๋ ํจ์์ ๋ด๋ถ๋ฅผ ๊ฐ๋ฆฌํจ๋ค๋ ๊ฒ์
๋๋ค.
# ๋ค ๋ฒ์งธ this
๋ค ๋ฒ์งธ๋ก ์ดํด๋ณผ this๋ ์ค์ ๋ก ์น ๊ฐ๋ฐ์ ํ ๋ ๊ฐ์ฅ ๋ง์ด ๋ง์ฃผํ๊ฒ ๋๋ this์ ๋๋ค. ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋ ์ฌ์ฉํ๋ HTTP ์์ฒญ๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฝ๋์ ๋๋ค.
function fetchData() {
axios.get('domain.com/products').then(function() {
console.log(this);
});
}
์ ํจ์๋ฅผ ์คํํ๋ฉด ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ ๊น์? ์ ๋ต์ window์ ๋๋ค.
fetchData(); // window
๊ธฐ๋ณธ์ ์ผ๋ก HTTP ์์ฒญ๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฝ๋๋ ์ ์ญ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ต๋๋ค. ์ ๋ฆฌํด์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฝ๋์ ์ฝ๋ฐฑ ํจ์๋ ์ ์ญ ์ปจํ ์คํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค๊ณ ๋ณด๋ฉด ๋๊ฒ ์ต๋๋ค.
# ๋ถ๋ก
์ ๋ณธ๋ฌธ์ ์ดํดํ๋๋ฐ ๋์์ด ๋๋ ์๋ฃ๋ค์ ๋๋ค.
# ํจ์ ์ ์ธ๋ฌธ
ํจ์ ์ ์ธ๋ฌธ์ ์๋์ ๊ฐ์ ํจ์ ์ ์ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค.
// ํจ์ ์ ์ธ๋ฌธ
function functionName() {
// ...
}
# ์์ฑ์ ํจ์
๊ทธ๋ฆฌ๊ณ ์์ฑ์ ํจ์๋ ์๋์ ๊ฐ์ด ํจ์๋ฅผ ์ด์ฉํด ์ ์ธ์คํด์ค๋ฅผ ์ ์ธํ๋ ํจ์๋ฅผ ์๋ฏธํฉ๋๋ค.
function Developer() {
// ...
}
var dev = new Developer();
TIP
์๋ฐ์คํฌ๋ฆฝํธ๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด์ ๋๋ค. ํด๋์ค ๊ธฐ๋ฐ ์ธ์ด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฐ ๊ฐ๋ฐ์ ๋ถ๋ค์ ํด๋์ค๊ฐ ์๋ค๊ณ ๋นํฉํ์ง ๋ง์ธ์ ๐