[JavaScript] ํจ์ ์ ์ธ๋ฌธ๊ณผ ํจ์ ํํ์, ํ์ดํ ํจ์ ๊ทธ๋ฆฌ๊ณ ํธ์ด์คํ
- -
๐ฃ ํจ์์ ์ธ, ํจ์ํํ์, ํ์ดํํจ์!
์ต๊ทผ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์๋ง ์ ๋ฆฌ๋ฅผ ํ์๋๋ฐ, ์ฃผ์ ์ ๋ค์์ฑ์ ์ํด ๋ค์ JavaScript ๊ฐ๋ ์ ์ ๋ฆฌํ์ฌ ๋ค๋ค๋ณผ๊นํ๋ค. ์ค๋์ ์ฃผ์ ๋ ํจ์์ ์ธ๋ฌธ, ํจ์ํํ์ ๊ทธ๋ฆฌ๊ณ ํ์ดํํจ์์ด๋ค!_! ๊ทธ๋ฆฌ๊ณ ํธ์ด์คํ ๊ณผ TDZ ๊น์ง ์ดํด๋ณผ๊ฑด๋ฐ, ์ฝ๊ฒ ์ฝ๊ฒ ์ ๋ฆฌ๋ฅผ ํ ํ ๋~ ์ค๋๋ ์ค๋ฐ๋จ!!
๐ฃ ํจ์ ์ ์ธํ
1. ๊ฐ๋ ๋ฐ ํน์ง
ํจ์ ์ ์ธ๋ฌธ์ ํจ์ ์ด๋ฆ๊ณผ ํจ๊ป "function" ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์ ์ํ๋ ๋ฐฉ์. ํจ์๊ฐ ํธ์ด์คํ ๋๊ธฐ ๋๋ฌธ์ ํจ์ ์ ์ ์ด์ ์ ํธ์ถํด๋ ๋์
- ํจ์ ์ ์ธํ์ function ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์ ์ธ
- ์คํฌ๋ฆฝํธ๋ ํจ์ ๋ด์์ ์ด๋์๋ ํธ์ถํ ์ ์์
- ํจ์ ์ ์ธํ์ ํธ์ด์คํ ์ผ๋ก ์ธํด ์ ์ธ๋ถ๊ฐ ์ฝ๋ ์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง
2. ์ฝ๋๋ก ์ดํด๋ณด๊ธฐ
function add(a, b) {
return a + b;
}
console.log(add(2, 3)); // Output: 5
function add(a, b) {
return a + b;
}
console.log(add(5, 7)); // Output: 12
- ์ด ์์์๋ 'add' ํจ์๊ฐ ํจ์ ์ ์ธ์ ์ฌ์ฉํ์ฌ ์ ์ธ
- ํจ์ ์ ์ธ์ ์์ ํ ํธ์ด์คํ
- ์ฆ, ํจ์ ์ด๋ฆ๊ณผ ํจ์ ๋ณธ๋ฌธ์ด ๋ชจ๋ ํด๋น ๋ฒ์์ ๋งจ ์๋ก ํธ์ด์คํ
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฝ๋์์ ์ ์ธํ๊ธฐ ์ ์ add ํจ์๋ฅผ ํธ์ถ ๊ฐ๋ฅ
ํจ์ ์ ์ธ: ์ ์ฒด ํจ์(์ด๋ฆ๊ณผ ๋ณธ๋ฌธ ๋ชจ๋)๊ฐ ํธ์ด์คํ . ํจ์๋ฅผ ์ ์ธํ๊ธฐ ์ ์ ํธ์ถ ๊ฐ๋ฅ
๐ฃ ํจ์ ํํ์
1. ๊ฐ๋ ๋ฐ ํน์ง
ํจ์ ํํ์์ ํจ์๋ฅผ ๋ณ์์ ํ ๋นํ์ฌ ์ ์ํ๋ ๋ฐฉ์์ผ๋ก, ํจ์๊ฐ ๋ณ์์ ์ ์ฅ๋์ด์ผ ํธ์ถ ๊ฐ๋ฅ. ํจ์ ํํ์์ ๋ณ์์ ํ ๋น๋ ์ดํ์๋ง ์ฌ์ฉ
- ํจ์ ํํ์์ ๋ณ์์ ํจ์๋ฅผ ํ ๋นํ์ฌ ์ ์ธํ๋ฉฐ
- ์ ์ธ ์ด์ ์ ํธ์ถํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์
- ํจ์ ํํ์์ ๋ณ์์ ์ค์ฝํ์ ๋ฐ๋ผ ๋์
- ์ฌ์ค ํจ์ ํํ์๋ ํธ์ด์คํ ์ด ๋๊ธฐ๋ ํ์ง๋ง ๋ณ์๊ฐ ํธ์ด์คํ ๋๋ ๊ฒ
ํจ์ํํ์๋ ๋ณ์ ์์ฒด๊ฐ ํธ์ด์คํ ๋์ง๋ง ํจ์์ ๋ํ ํ ๋น์ ๋ฐํ์์ ๋ฐ์ํจ
- ํจ์ ํํ์์์๋ ํจ์ ์ ์๊ฐ ์๋ ๋ณ์ ์ ์ธ๋ง ๋์ด์ฌ๋ ค์ง
- ๋ณ์๋ ํด๋น ๋ฒ์์ ๋งจ ์๋ก ๋์ด์ฌ๋ ค์ง๊ณ '์ ์๋์ง ์์ undefined'์ผ๋ก ์ด๊ธฐํ
- ์ค์ ํจ์ ํ ๋น์ ํ ๋น ๋ฌธ์ด ์คํ๋๋ ์ง์ ์ธ ๋ฐํ์์ ๋ฐ์
2. ์ฝ๋๋ก ์ดํด๋ณด๊ธฐ
const add = function(a, b) {
return a + b;
};
console.log(add); // Output: ReferenceError: Cannot access 'add' before initialization
const add = function(a, b) {
return a + b;
};
console.log(add(5, 3)); // Output: 8
- ์ด ์์์๋ add ๋ณ์๊ฐ const๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ๋๊ณ ํจ์ ํํ์์ด ํ ๋น
- var์ ๋ฌ๋ฆฌ const(๋ฐ let)๋ก ์ ์ธ๋ ๋ณ์๋ undefine์ผ๋ก ์ด๊ธฐํ๋์ง ์์ผ๋ฉฐ
- ๋ธ๋ก ์์๋ถํฐ ์ ์ธ์ด ๋ํ๋ ๋๊น์ง "์ผ์์ ๋ฐ๋์กด"
- ์ด๋ ์ ์ธ ์ ์ add์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ReferenceError๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๋ฏธ
๋ณ์ ์ ์ธ(const ์ฌ์ฉ): ์ ์ธ์ ํด๋น ๋ฒ์์ ๋งจ ์๋ก ๋์ด์ฌ๋ ค์ง์ง๋ง ์ด๊ธฐํ๋์ง๋ ์์. ๋ณ์๋ ํ ๋น์ด ๋ฐ์ํ ๋๊น์ง "์ผ์์ ๋ฐ๋์กด"์ ์์.
๊ธฐ๋ฅ ํ ๋น: ํ ๋น์ ๋ฐํ์์ ๋ฐ์. ํ ๋น ์ ์ ๋ณ์์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ReferenceError๊ฐ ๋ฐ์
๐ฃ ํ์ดํ ํจ์
1. ๊ฐ๋ ๋ฐ ํน์ง
- ํ์ดํ ํจ์๋ ์์ฒด this, arguments, super ๋๋ new.target์ ๋ฐ์ธ๋ฉํ์ง ์๋ ํจ์ ํํ์์ ์์ฑํ๊ธฐ ์ํ ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ
- ํ์ดํ ํจ์ ํํ์(ํ์ดํ ํจ์ expression)์ ํจ์ ํํ์์ ๋ํ ๊ฐ๊ฒฐํ ๋์์ผ๋ก, ์ฝ๊ฐ์ ์๋ฏธ์ ์ฐจ์ด์ ์๋์ ์ธ ์ฌ์ฉ์์ ์ ํ์ ๊ฐ์ง๊ณ ์์
2. ์ฝ๋๋ก ์ดํด๋ณด๊ธฐ
const add = (a, b) => a + b;
console.log(myArrowFunction); // Output: undefined
var myArrowFunction = () => {
console.log("Hello, world!");
};
myArrowFunction(); // Output: Hello, world!
- ์ด ์์์๋ myArrowFunction ๋ณ์๊ฐ ํธ์ด์คํ ๋๊ณ undefine์ผ๋ก ์ด๊ธฐํ
- ํ์ดํ ํจ์ ์์ฒด๋ ํธ์ด์คํ ๋์ง ์์ผ๋ฉฐ ํ ๋น์ ๋ฐํ์์ ๋ฐ์
- ๋ฐ๋ผ์ ํ ๋น ์ ์ 'myArrowFunction'์ ํธ์ถํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ง ํ ๋น ์ ์ ๋ณ์๋ฅผ ๊ธฐ๋กํ๋ฉด '์ ์๋์ง ์์'์ด ํ์
ํ์ดํ ํจ์์ ๋ํ ๋ณ์ ์ ์ธ์ด ํธ์ด์คํ ,
ํ์ดํ ๊ธฐ๋ฅ ํ ๋น์ ํธ์ด์คํ ๋จ๊ณ๊ฐ ์๋ ๋ฐํ์์ ๋ฐ์
๐ฃ ํจ์ ์ ์ธํ vs ํจ์ ํํ์
1. ํธ์ด์คํ
- ํจ์ ์ ์ธ๋ฌธ์ ํธ์ด์คํ ์ ์ํด ์ฝ๋์ ์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ฏ๋ก ์ ์ ์ด์ ์๋ ํธ์ถ ๊ฐ๋ฅ
- ๋ฐ๋ฉด, ํจ์ ํํ์์ ๋ณ์ ํ ๋น์ด ์ด๋ฃจ์ด์ง ์ดํ๋ถํฐ ํธ์ถ
2. ์ต๋ช ํจ์
- ํจ์ ์ ์ธ๋ฌธ์ ํจ์ ์ด๋ฆ์ด ํ์์ ์ด์ง๋ง, ํจ์ ํํ์์ ์ต๋ช ํจ์๋ก ์ ์ํ ์ ์์
3. ํํ์์ผ๋ก ํ์ฉ
- ํจ์ ํํ์์ ๋ณ์์ ํ ๋น๋๋ฏ๋ก, ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌํ๊ฑฐ๋ ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๋ฑ ๋ค์ํ ์ํฉ์์ ํ์ฉ ๊ฐ๋ฅ
๐ฃ ํธ์ด์คํ
1. ๊ฐ๋ ๋ฐ ํน์ง
ํธ์ด์คํ ์ ์ปดํ์ผ ๋จ๊ณ ์ค์ ๋ณ์ ๋ฐ ํจ์ ์ ์ธ์ด ํฌํจ ๋ฒ์์ ๋งจ ์๋ก ์ด๋๋๋ ๋์
- JavaScript์์ ํธ์ด์คํ ์ ์ปดํ์ผ ๋จ๊ณ ์ค์ ๋ณ์ ๋ฐ ํจ์ ์ ์ธ์ด ํฌํจ ๋ฒ์์ ๋งจ ์๋ก ์ด๋๋๋ ๋์
- ์ฆ, var๋ก ์ ์ธ๋ ๋ณ์๋ ์ ์๋์ง ์์์ผ๋ก ์ด๊ธฐํ๋๋ ๋ฐ๋ฉด, ํจ์ ์ ์ธ์ ์ฝ๋์ ์ ์๋๊ธฐ ์ ์ ํธ์ถ ๊ฐ๋ฅ
- ๊ทธ๋ฌ๋ 'let' ๋ฐ 'const' ์ ์ธ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ด์ฌ๋ ค์ง์ง ์์ผ๋ฉฐ ํด๋น ์ ์๋ฅผ ๋ง๋ ๋๊น์ง ์๊ฐ์ ๋ฐ๋์กด์ ๋จ์.
2. ์ฃผ์ํ ์ ?
ํธ์ด์คํ ์ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์์ธก ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ ์ ์์ผ๋ฏ๋ก, ๋ณ์ ๋ฐ ํจ์๋ฅผ ๊ฐ๋ฅํํ ์ ์ธํ ์์น์ ๊ฐ๊น์ด ํ๊ณ , ๋ฏธ๋ฆฌ ์ด๊ธฐํํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ
3. ์ฅ๋จ์ ?
์ฅ์
- ์ ์ฐ์ฑ: ํจ์์ ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๋๋ก๋ ๋ ๊น๋ํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๊ฐ ์์ฑ๋ ์ ์์.
- ํจ์ ๋ฒ์ ๋ช ํ์ฑ: ํจ์ ์ ์ธ์ ๊ฒฝ์ฐ ํจ์ ๋ฒ์๊ฐ ๋ธ๋ก ๋ฒ์๊ฐ ์๋ ํฌํจ ํจ์๋ก ์ง์ ๋๋ค๋ ์ ์ ๋ช ํํ ํ๋๋ฐ, JavaScript์ ํจ์ ๋ฒ์ ๊ท์น์ ๋ฐ๋ฆ
๋จ์
- ์ ์ฌ์ ์ธ ๋ฒ๊ทธ: var๋ก ์ ์ธ๋ ๋ณ์๋ undefined์ผ๋ก ๋์ด์ฌ๋ ค์ง๊ณ ์ด๊ธฐํ. ์ด๋ ๊ฐ์ด ํ ๋น๋๊ธฐ ์ ์ ์ก์ธ์คํ๋ฉด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ์์.
- ๊ฐ๋ ์ฑ ๋ฌธ์ : ํธ์ด์คํ ์ ์ฝ๋์ ์ค์ ์คํ ์์๋ฅผ ๋ชจํธํ๊ฒ ๋ง๋ค์ด ํธ์ด์คํ ๊ท์น์ ์ต์ํ์ง ์์ ๊ฐ๋ฐ์๊ฐ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์.
- ์๊ฒฉ ๋ชจ๋ ์ฐจ์ด์ : ์๊ฒฉ ๋ชจ๋(``use strict';`)์์๋ 'var'์ ์ฌ์ฉํ์ฌ ์ฐ๋ฐ์ ์ธ ์ ์ญ ๋ณ์๊ฐ ์์ฑ๋์ง ์์. ์ด๋ ํธ์ด์คํ ๋์์ ๋ณ๊ฒฝํ๊ณ ์ฝ๋๊ฐ ์ ๋๋ก ๊ตฌ์กฐํ๋์ง ์์ ๊ฒฝ์ฐ ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์.
์์ฝํ๋ฉด ํธ์ด์คํ ์ ์ ์ฐ์ฑ์ ์ ๊ณตํ๊ณ JavaScript์ ๋ฒ์ ์ง์ ๊ท์น์ ๋ถํฉํ ์ ์์ง๋ง ๋ณ์ ์ด๊ธฐํ ๋ฐ ์ฝ๋ ๋ช ํ์ฑ๊ณผ ๊ด๋ จ๋ ์ ์ฌ์ ์ธ ํจ์ ๋ ๋ฐ์. ๋ณ์ ์ ์ธ์ 'let' ๋ฐ 'const'๋ฅผ ์ฌ์ฉํ๊ณ ๋ช ํํ ์ฝ๋ ๊ตฌ์ฑ์ ๋ณด์ฅํ๋ ๋ฑ์ ์ต์ JavaScript ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ฌธ์ ์ค ์ผ๋ถ๋ฅผ ์ํ ๊ฐ๋ฅ.
๐ฃ TDZ (Temporal Dead Zone)
1. ๊ฐ๋
- TDZ(Temporal Dead Zone)๋ ๋ณ์๊ฐ ์ ์ธ๋ ์์น๋ถํฐ ์ด๊ธฐํ๋ ๋๊น์ง์ ์์ญ
- let๊ณผ const ๋ณ์๋ ์ ์ธ๋์์ง๋ง ์์ง ์ด๊ธฐํ๋์ง ์์ ์ํ์์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด TDZ์ ํด๋นํ๋ฉฐ ์๋ฌ๊ฐ ๋ฐ์
- ์ดํ ๋ณ์๊ฐ ์ด๊ธฐํ๋๋ฉด TDZ๋ฅผ ๋ฒ์ด๋ ์ ์์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ.
์ฝ๊ฒ ๋งํ๋ฉด, ๋ณ์๊ฐ ์์ฑ(=๋ณ์์ ์ธ)๋๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ฒ์ ๊ฐ์ด ์ ์ฅ(=์ด๊ธฐํ) ๋ ๋๊น์ง์ ์์ญ์ผ๋ก
๋ฉ๋ชจ๋ฆฌ์ ์ด๊ธฐ ๊ฐ์ด ์๋ ์ํ์์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ!
- *ES6์ let๊ณผ const๋ ๋ณ์๋ฅผ ๋ธ๋ก์ ์๋จ์ผ๋ก ํธ์ด์คํ ํ์ง๋ง ์ด๊ธฐํํ์ง๋ ์์! ๋ณ์๊ฐ ์ ์ธ๋๊ธฐ ์ ์ ๋ธ๋ก ์์์ ์ฌ์ฉํ ์ ์๋๋ฐ, ์ด ์์น๋ฅผ ์๊ฐ์ ์ฌ๊ฐ์ง๋(Temporal Dead Zone, TDZ)๋ผ๊ณ ํํ. (ReferenceError ๋ฐ์)
- ์ฐธ๊ณ ๋ก var ์ ์ธ์ ๊ฒฝ์ฐ undefined๋ก ์ด๊ธฐํ ๋๊ธฐ ๋๋ฌธ์ TDZ๊ฐ ์์!_!
TDZ์ ๋ํด์ ์กฐ๊ธ ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฉด ์ด์ ์ ๋ฆฌ๊ธ ์ฐธ๊ณ !
[JavaScript] TDZ(Temporal Dead Zone) : ๋ณ์์ ์๊ฐ ์ฌํ~
๐ฃ ๋ณ์์ ์๊ฐ ์ฌํ! Temporal Dead Zone!์ค๋์ TDZ์ ๋ํด์ ์ดํด๋ณด๋๋ก ํ๊ฒ ๋ค. Temporal Dead Zone, TDZ! ๋ ๋ฌด์์ด๋!? ๐ฃ TDZ ๋?1. ๊ฐ๋ TDZ(Temporal Dead Zone)๋ ๋ณ์๊ฐ ์ ์ธ๋ ์์น๋ถํฐ ์ด๊ธฐํ๋ ๋๊น์ง
haileyham.tistory.com
์ด์ ํธ์ด์คํ ๊ณผ TDZ๊น์ง ์ฝ๊ฒ ์ค๋ช ๊ฐ๋ฅ!
'FrontEnd > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋นํธ(Vite)์ ๋์๋ณด์! ๋๋ ๋ ๋นํธ! (0) | 2024.06.17 |
---|---|
ํด๋ฆฌํ(Polyfill)๊ณผ ๋ฐ๋ฒจ(Babel) ๋น๊ตํ๋ฉฐ ๊ฐ๋ ์ฒดํฌ! (0) | 2024.06.17 |
๋ฐ๋ฒจ(Babel)์ ๋ํด์ ์์๋ณด์! (0) | 2024.06.17 |
์นํฉ(Webpack)์ ํํค์ณ ๋ณด์! (0) | 2024.06.17 |
๋ฒ๋ค(bundle)๊ณผ ๋ฒ๋ค๋ง(bundling) (0) | 2024.06.17 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค