์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ๋ ์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ํ์์ ์ผ๋ก ๋ง์ฃผ์น๊ฒ ๋๋ ํธ์ด์คํ ์ ๋ํด ๋ฐ๋ก ์ ๋ฆฌํด ๋ณธ๋ค.
ํธ์ด์คํ Hoisting
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ณ์ ์ ์ธ์ด๋ ํจ์ ์ ์ธ์ด ํด๋น ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ์ฌ๋ ค์ง๋ ํ์์ ๋งํ๋ค.
๋ณ์์ ํธ์ด์คํ
๋จผ์ ๋ณ์์์์ ํธ์ด์คํ ์ ์์๋ณด์.
var๋ก ์ ์ธํ ๋ณ์
console.log(hi); // undefined
var hi = 'hello';
์์ ๊ฐ์ ์ฝ๋๊ฐ ์์ ๋, undefined๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ ์ด์ ๊ฐ ๋ฐ๋ก ํธ์ด์คํ
๋๋ฌธ์ธ๋ฐ, ๋ณ์ hi์ ์ ์ธ๋ฌธ์ด ๋จผ์ ์ต์๋จ์ผ๋ก ์ฌ๋ผ๊ฐ ๋ฒ๋ ค ์ ์ธ๋์์ง๋ง ์์ง 'hello'๋ผ๋ ํ ๋น์ ๋ฐ๊ธฐ ์ ์ธ ์ํ์ด๋ค.
var ํค์๋๋ก ์ ์ธ๋ ๋ณ์์ ๊ฒฝ์ฐ ์ ์ธ๊ณผ ๋์์ undefined๋ก ํ ๋น๋๋ค๋ ํน์ง์ด ์๋ค.
let ๋๋ const๋ก ์ ์ธํ ๋ณ์
console.log(kiwi); // Uncaught ReferenceError: kiwi is not defined
let kiwi = 'kiwi'; // ์ ์ธ๊ณผ ํ ๋น
console.log(kiwi); // kiwi
์ด๋ฒ์ es6์ ์ถ๊ฐ๋ let, const๋ก ์ ์ธํ ๋ณ์๋ฅผ ๋ณด์. let ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ฅผ ์์๋ก ๋ฃ์๋ค.
let, const ํค์๋๋ var ํค์๋์ ๋ฌ๋ฆฌ ๋ณ์์ ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ(ํ ๋น) ๋จ๊ณ๊ฐ ๋๋์ด์ ์งํ๋๋ค.
์ฒซ ๋ฒ์งธ ์ถ๋ ฅ์์ ๋ณ์๊ฐ ์์ง ์ด๊ธฐํ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ณ์ kiwi๊ฐ ์ด๊ธฐํ๋๊ธฐ ์ ๊น์ง, ์ฐธ์กฐ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์ด ๊ตฌ๊ฐ์ TDZ(Temporal Dead Zone). ์ผ์์ ์ฌ๊ฐ์ง๋๋ผ๊ณ ํ๋ค.
์ด ๊ตฌ๊ฐ์์ ๋ฐ์ํ๋ ์๋ฌ ๋๋ถ์ ๋ค์ํ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์๋ค.
ํจ์์ ํธ์ด์คํ
ํจ์์ ํธ์ด์คํ ์ญ์ ๋ณ์์ ํธ์ด์คํ ๊ณผ ๋น์ทํ๊ฒ ํจ์์ ์ธ์ด ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ์ฎ๊ฒจ์ง๋ ํ์์ด๋ค.
ํจ์ ์ ์ธ๋ฌธ
foo();
function foo(){
console.log('hi');
}
์ ์ฝ๋๋ ์ ์์ ์ผ๋ก 'hi'๋ผ๋ ๊ฐ์ ์ถ๋ ฅํ๋ค.
ํจ์ foo()
๊ฐ ํธ์ถ๋ ํ์ ์ ์ธ๋๋ ํ๋ฆ์ด์ง๋ง, ํธ์ด์คํ
์ด ๋ฐ์ํด์ ์ด๋ฏธ ์ต์๋จ์ foo()
๊ฐ ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
ํจ์ ์ ์ธ๋ฌธ์ผ๋ก ์ ์ธ๋ ํจ์์ ๊ฒฝ์ฐ ํจ์ ์ ์ฒด๋ฅผ ํธ์ด์คํ ํ๊ธฐ ๋๋ฌธ์ ์ ์ธ ์ ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
ํจ์ ํํ์
ํจ์ ํํ์์ ๊ฒฝ์ฐ๋ ๋ณ์์ ํจ์๋ฅผ ํ ๋นํ๋ ์์ผ๋ก ํจ์๋ฅผ ์ ์ํ๊ธฐ ๋๋ฌธ์ ๋ณ์์ ํธ์ด์คํ ์ฒ๋ผ ์ ์ธ๊ณผ ํ ๋น์ด ๋๋์ด์ ธ ์๋ค.
banana(); // TypeError: banana is not a function
const banana = function(){
console.log('b');
}
์์ ๊ฐ์ ์ฝ๋๊ฐ ์์ ๋ TypeError: banana is not a function
์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํจ์ ํํ์์ ์ ์ธ๋ถ๋ง ํธ์ด์คํ
์ด ๋์๊ธฐ ๋๋ฌธ์ ์คํ ํ๋ฆ์ด ํ ๋น๋ฌธ์ ๋๋ฌํ์ ๋ ์ฌ์ฉํ ์ ์์ด ํ์
์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
TDZ(Temporal Dead Zone)
์์์ ์ธ๊ธํ TDZ๋ ๋ณ์๊ฐ ์ ์ธ๋๊ธฐ ์ ์ ์ฐธ์กฐํ๋ ค ํ์ ๋ ๋ฐ์ํ๋ ์๋ฌ๋ฅผ ๋งํ๋ค.
TDZ๋ let, const๋ก ์ ์ธ๋ ๋ณ์์์๋ง ๋ฐ์ํ๋ค.
์ด ํค์๋๋ค์ ๋ธ๋ก ์ค์ฝํ๋ฅผ ๊ฐ๊ณ , TDZ ์ญ์ ๋ณ์๊ฐ ์ ์ธ๋ ๋ธ๋ก ๋ฒ์ ์์์๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
let, const ๋ณ์ ์ญ์ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง๋ง TDZ ๋๋ฌธ์ ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
์ถ์ฒ
'๐ Studying > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ์์ํจ์ (0) | 2023.04.05 |
---|---|
[JavaScript] parameter์ argument (0) | 2023.03.28 |
[Javascript] ๋ ๋ณํฉ์ฐ์ฐ์ '??'์ ์ต์ ๋ ์ฒด์ด๋ '?.' (1) | 2022.12.01 |
[Javascript] ์คํ ์ปจํ ์คํธ (0) | 2022.11.30 |
[Javascript] ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ์์ ๋ณต์ฌ, ๊น์ ๋ณต์ฌ (0) | 2022.11.29 |
Comment