๐จโ๐ TDZ๋ ๋ฌด์์ผ๊น?
TDZ ( Temporal Dead Zone )๋ ํด์ํ๋ฉด "์ผ์์ ์ฌ๊ฐ์ง๋" ์ด๋ค.
์ ์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ด๋ค ๋ถ๋ถ์์ ์๋ฌ๊ฐ ์ผ์ด๋๋์ง ์ดํด๋ณด์!
์ฒซ ๋ฒ์งธ ์ฝ๋ [ ์ธ์คํด์ค ์์ฑ ํ ํด๋์ค ์ ์ธ ]
const myCat = new cat('mimi')
class cat {
constructor(name) {
this.name = name;
}
}
๋ ๋ฒ์งธ ์ฝ๋ [ ํจ์ ํธ์ถ ํ ํจ์ ์ ์ธ]
hello('Shin')
function hello (name) {
return `Hello ${name} :)`
}
์ ๋๊ฐ์ ์ฝ๋๋ฅผ ์คํํด๋ณด๋ฉด ๋ ๋ฒ์งธ ์ฝ๋๋ ์ ์์ ์ผ๋ก ์๋ ํ์ง๋ง ์ฒซ ๋ฒ์งธ ์ฝ๋๋ฅผ ์๋์ํค๋ฉดReferenceError: Cannot access 'cat' before initialization
์ค๋ฅ๊ฐ ๋จ๊ฒ ๋๋ค.
๊ทธ๋ผ ์ ํ๋๋ ์ค๋ฅ๊ฐ ๋๊ณ , ํ๋๋ ์ค๋ฅ๊ฐ ๋์ง ์์๋์ง์ ๋ํด ์๊ธฐ ์ํด TDZ์ ๋ํด ์์๋ณด์!
๐ต๏ธโโ๏ธTDZ์ ๋ํด
๊ทธ๋ผ TDZ์ ๋ํด ์์๋ณด๊ธฐ ์ํด ์์๋ฅผ ๋ง๋ค๊ฒ ์ต๋๋ค.
์๋ ์ฝ๋๋ const ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ์ด๊ธฐํํ ๋ค์ ๋ณ์ ๊ฐ์ ์ถ๋ ฅํ๋ ์์๋ก ์๋ํฉ๋๋ค.
const cat = "์ผ์น"
console.log(cat)
์ด๋ฒ์๋ ์์๋ฅผ ๋ฐ๊ฟ์ ๋ณ์์ ๋จผ์ ์ฌ์ฉํ๊ณ , ๊ทธ ๋ค์ ์ ์ธ ๋ฐ ์ด๊ธฐํ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค.
console.log(cat)
const cat = "์ผ์น"
//error : ReferenceError
์์๋ฅผ ๋ฐ๊พธ๋ฉด ReferenceError
์ค๋ฅ๊ฐ ๋ํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ ์ด๋ฏธ์ง๋ฅผ ์ฐธ๊ณ ํ๋ฉด TDZ๋ผ๋ ๊ฒ์ ๋ณ์ ์ ์ธ ๋ฐ ์ด๊ธฐํ ํ๊ธฐ ์ ์ฌ์ด์ ์ฌ๊ฐ์ง๋ ์ธ ๊ฒ์ ์ ์ ์์ต๋๋ค!
์ฆ ๋ณ์๋ฅผ ์ ์ธ ๋ฐ ์ด๊ธฐํ ํ๊ธฐ์ ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด TDZ ์ํ์์ ์ฌ์ฉํ๋ ๊ฒ ์ด๊ธฐ ๋๋ฌธ์ ReferenceError
์๋ฌ๊ฐ ๋ํ๋๊ฒ ๋ฉ๋๋ค !!
๐คทโโ๏ธ TDZ์ ์ํฅ์ ๋ฐ๋ ๊ตฌ๋ฌธ์ ๋ํด ์์๋ณด์.
1. const ๋ณ์
โ
console.log(cat)
const cat = "์ผ์น"
//error : ReferenceError
๐
const cat = "์ผ์น"
console.log(cat)
// ์ถ๋ ฅ : ์ผ์น
2. let ๋ณ์
โ
count;
let count;
count = 10;
//error : ReferenceError
๐
let count;
count; // => undefined
count = 10;
count; // => 10
3. class ๊ตฌ๋ฌธ
โ
const myCar = new cat('mimi')
class cat {
constructor(name) {
this.name = name;
}
}
//error : ReferenceError
๐
class cat {
constructor(name) {
this.name = name;
}
}
const myCat = new cat('mimi')
console.log(myCat.name) // => mimi
๐คทโโ๏ธ TDZ์ ์ํฅ์ ๋ฐ์ง ์๋ ๊ตฌ๋ฌธ!
var, function, import ๊ตฌ๋ฌธ
// Works!
value; // => undefined
var value;
// Works!
hello('Shin') // "Hello Shin :)"
function hello (name) {
return `Hello ${name} :)`
}
hello('Shin') // "Hello Shin :)"
๋ฐฐ์ด์
TDZ์ ์ํฅ์ ๋ฏธ์น๋ const, let, class ๋ฅผ ์ฌ์ฉํ ๋ ํญ์ ์์๋ฅผ ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ๊ฒ ๊ณ , TDZ๋ ์ ์ธํ๊ธฐ ์ ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉํ์ง ์๋ ๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค.
๋ฐ๋๋ก var ๋ณ์๋ ์ ์ธ ์ ์๋ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ์ํค๊ฑฐ๋ ์ค๋ฅ๋ฅผ ์ผ์ผํค๋ ์์ธ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ var ์ฌ์ฉ์ ํผํ๊ณ let๊ณผ const ์ฌ์ฉ์ ์ฃผ๋ก ํด์ผ๊ฒ ๋ค.
์ฐธ๊ณ ์๋ฃ : Don't Use JavaScript Variables Without Knowing Temporal Dead Zone
'Study > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ JS ] Event ์ ๋ฆฌ (0) | 2022.02.08 |
---|---|
[ JS ] DOM์ ๋ํ ์ด ์ ๋ฆฌ! (0) | 2022.02.08 |
[ JS ] ์ผ๋ฐ ํจ์์ ์ต๋ช ํจ์์ ์ฐจ์ด์ ๋ํด ์์๋ณด์! (0) | 2022.02.08 |
[JS] value, textContent, innerHTML, innerText ๋ ์ด๋ป๊ฒ ๋ค๋ฅผ๊น? (0) | 2022.02.08 |
[JavaScript] JS์ jQuery๋ฅผ ์ฌ์ฉํ์ฌ Flask์์ ๋ฐ์ดํฐ๋ฅผ json์ผ๋ก ๋ฐ์ ์ฌ์ฉํ๊ธฐ (0) | 2021.12.25 |