2025. 8. 16. 15:35ใFront-end/JavaScript

๋ชฉ์ฐจ
1. this ํค์๋๋?
2. ํจ์ ๋จ์ ํธ์ถ์์์ this
3. ๋ฉ์๋ ํธ์ถ์์์ this
4. ์์ฑ์ ํธ์ถ์์์ this
5. ํ์ดํ ํจ์์์์ this
1. this ํค์๋๋?
ํ์ฌ ์คํ ์ค์ธ ๋ฌธ๋งฅ(context)๋ฅผ ์ฐธ์กฐํ๋ ํค์๋์ด๋ค.
๊ธฐ๋ณธ ๊ฐ๋
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์คํ ์ปจํ ์คํธ (Execution Context)๊ฐ ์์ฑ๋๋ค.
- ์ด ์ปจํ ์คํธ ์์๋ this๊ฐ ์๋์ผ๋ก ๋ค์ด๊ฐ๋๋ฐ, ๊ฐ์ด ๊ณ ์ ๋์ด ์์ง ์๊ณ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
ํน์ง
- ์ฝ๊ธฐ ์ ์ฉ : ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฐ๊ฟ ์ ์๊ณ , call(). apply(), bind()๋ฑ์ ๋ด์ฅ ํจ์๋ก ๊ฐ์ ์ ์ด๋ง ๊ฐ๋ฅ
- ๋ฐํ์์์ ๊ฒฐ์ ๋จ : ํจ์๊ฐ ์ ์๋ ๋๊ฐ ์๋ ํธ์ถ๋ ๋ ๋ฌด์์ ์ฐธ์กฐํ ์ง ๊ฒฐ์
- ํธ์ถ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๊ฐ ๋ฌ๋ผ์ง๋ค.
๊ทธ๋ผ ํธ์ถ ๋ฐฉ๋ฒ์๋ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง, ์ด๋ป๊ฒ ๋ฌ๋ผ์ง๋์ง ์์๋ณด์.
2. ํจ์ ๋จ์ ํธ์ถ์์์ this
ํจ์๋ฅผ ๋จ์ ํธ์ถ ํ ๋ this๋ ํญ์ ์ ์ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
*์ ์ญ ์คํ๋ฌธ์์, ์ผ๋ฐ ํจ์๋ฅผ ํธ์ถํ ๋, ๋ฑ๋ฑ..
*์ ์ญ ์คํ๋ฌธ : JS ์์ง์ด ์ฝ๋๋ฅผ ์คํํ ๋ ์ฒ์์ผ๋ก ์์ฑ๋๋ ๋ฌธ
// 1. ๋น์๊ฒฉ ๋ชจ๋
function func() {
console.log(this === window); // true
}
func();
// 2. ์๊ฒฉ ๋ชจ๋
function func() {
'use strict';
console.log(this === window); // false
console.log(this === undefined); // true
}
func();
- ์คํ ํ๊ฒฝ์ด ๋ธ๋ผ์ฐ์ ์ผ ๋
- ์ ์ญ ๊ฐ์ฒด๋ window๋ก, ์ ์ญ ์คํ๋ฌธ์์ this๋ window๋ฅผ ๋ฐ์ธ๋ฉํ๋ค.
- ๋จ, 'use strict'๋ฅผ ์ฐ๋ฉด undefined์ด๋ค.
- ์คํ ํ๊ฒฝ์ด Node.js์ผ ๋
- ์ ์ญ ๊ฐ์ฒด๋ global์ด๋, Node.js์ ์ต์์ ์ค์ฝํ ์ฝ๋๊ฐ CommonJS ๋ชจ๋ ์ค์ฝํ ๋ด์์ ์คํ๋์ด,
์ ์ญ ์คํ๋ฌธ์์ this๊ฐ global์ ๊ฐ๋ฆฌํค์ง ์๋๋ค. → this๋ {}๋น ๊ฐ์ฒด๋ฅผ ๋ฐ์ธ๋ฉ - ๋น์๊ฒฉ ๋ชจ๋์์๋ global, ์๊ฒฉ ๋ชจ๋์์๋ undefined๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ์ ์ญ ๊ฐ์ฒด๋ global์ด๋, Node.js์ ์ต์์ ์ค์ฝํ ์ฝ๋๊ฐ CommonJS ๋ชจ๋ ์ค์ฝํ ๋ด์์ ์คํ๋์ด,
3. ๋ฉ์๋ ํธ์ถ์์์ this
๊ฐ์ฒด์ ํ๋กํผํฐ ํจ์๋ฅผ ๋ฉ์๋๋ผ๊ณ ํ๋ค.
๋ฉ์๋์ this ๋ฐ์ธ๋ฉ์ ํด๋น ๋ฉ์๋๋ฅผ ์์ ํ๋ ๊ฐ์ฒด๋ก ๋๋ค.
const obj = {
lang: 'javascript',
greeting() {
console.log(this);
return `hello ${this.lang}`;
}
}
console.log(obj.greeting()); // hello javascript
console.log(greeting()); // hello undefined
4. ์์ฑ์ ํธ์ถ์์์ this
new ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ํธ์ถํ๋ฉด ์์ฑ์ ํจ์๋ก ๋์ํ๋ค.
์์ฑ์ ํจ์ ์์์ this๋ ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
function Vehicle(type) {
this.type = type;
}
const car = new Vehicle('Car'); // ํจ์๋ฅผ ์์ฑ์ ํจ์๋ก ํธ์ถ
์์ฑ์ ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ฒด ์์ฑ ์, ๋์ ์์๋ ์๋์ ๊ฐ๋ค.
- ํ๋กํผํฐ ์์ฑ : this๊ฐ ๋ฐ์ธ๋ฉํ ๊ฐ์ฒด์ ํ๋กํผํฐ ์์ฑ
→ ๋ด๋ถ์ ์ผ๋ก ์ ๊ฐ์ฒด ์์ฑ e.g. this = {} - this ๋ฐ์ธ๋ฉ : ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ this์ ๋ฐ์ธ๋ฉ๋จ
- ํ๋กํผํฐ/๋ฉ์๋ ์ ์ : ์์ฑ์ ํจ์ ๋ด๋ถ์์ this.xxx = yyy๋ก ํ๋กํผํฐ/๋ฉ์๋๊ฐ ๊ฐ์ฒด์ ์ถ๊ฐ๋จ
- ์๋ฌต์ ๋ฐํ : ๋ช ์์ ์ผ๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ง ์๋ ํ, this๊ฐ ๋ฐ์ธ๋ฉ๋ ์ ๊ฐ์ฒด๊ฐ ๋ฐํ๋จ
5. ํ์ดํ ํจ์์์์ this
ํ์ดํ ํจ์๋ ์ ์๋ ์์ ์ ์์ ์ค์ฝํ์ this๋ฅผ ์ฌ์ฉํ๋ค.
const obj = {
name: "๋ค์ฐ",
arrow: () => console.log(this.name)
};
obj.arrow(); // undefined
๊ฐ์ฒด๋ฅผ ๋ช ์ํ๊ณ arrow๋ฅผ ํธ์ถํ์ผ๋, ๋ฉ์๋์ ๊ฒฝ์ฐ์๋ ๋ค๋ฅด๊ฒ undefine๊ฐ ์ถ๋ ฅ๋๋ค.
ํ์ดํ ํจ์์ธ arrow๋ this๋ฅผ ๊ฐ์ง์ง ์๊ณ , ์์ ์ค์ฝํ(์ ์ญ ๊ฐ์ฒด ๋ฑ)์ this๋ฅผ ์ฌ์ฉํ๋๋ฐ,
ํ์ฌ ์์ ์ค์ฝํ์๋ name์ด ์ ์๋์ง ์์๊ธฐ์ undefined๊ฐ ๋์จ๋ค.
- obj ๊ฐ์ฒด ์ธ๋ถ (์ฆ, ์์ ์ค์ฝํ)์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด obj.arrow();๊ฐ ์ ๋๋ก ์ถ๋ ฅ๋๋ค.
→ this.name = "๋ค์ฐ";
๊ธฐ์ด๋ถํฐ ์์ฑ๊น์ง, ํ๋ฐํธ์๋ (์ด์ฌ์ฑ|ํ์ )
๊ธฐ์ด๋ถํฐ ์์ฑ๊น์ง, ํ๋ฐํธ์๋ - ์์ค24
๋๋์ด, ์ต์ด์ ๊ฐ๋ก ์๊ฐ ๋์์ต๋๋ค! ํ๋ฐํธ์๋์ ๊ฐ๋ ๊ณผ ์๋ฆฌ๋ฅผ ๋ชจ๋ ๋ด์ “ํ๋ฐํธ์๋์ ์ ์”์ฒซ์งธ, ๊ฐ๋ ๊ณผ ์ค์ต, ์ ์ฉ๊ณผ ํจ์จ์ ๋ชจ๋ ์ก์ ๋์! ํํํ๊ฒ ๊ฐ๋ ์ ์ก๊ณ , ๊ฐ๋ ์ ๋ฐ๋ก ์
www.yes24.com
'Front-end > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํธ๋์คํ์ผ๋ฌ์ ํด๋ฆฌํ (2) | 2025.08.19 |
|---|---|
| B11 : ํจ์ ๋ด์ฅ ๋ฉ์๋ (1) | 2025.08.17 |
| B9 : ํจ์์ ํจ์์ ์ ์ธ (6) | 2025.08.15 |
| B8 : ๋ฐ๋ณต๋ฌธ (2) | 2025.08.14 |
| [WIP] defer ๐ async ๐ DOMContentLoaded (1) | 2025.08.14 |
GitHub