βοΈ μ΄λ² μ λ μ ν΅ν΄ μκ² λ κ²
TDZ(temporal dead zone)μ΄λ 무μμΈκ°μ?
μ묡μ μ μμ΄ λ¬΄μμΈκ°μ?
<λ΅ λ―Έλ¦¬λ³΄κΈ°>
π€ TDZ(temporal dead zone)μ΄λ 무μμΈκ°μ?
π€ μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν μμ μ§μ κΉμ§ λ³μλ₯Ό μ°Έμ‘°ν μ μλ ꡬκ°μ λ§ν©λλ€.
π€ μ묡μ μ μμ΄ λ¬΄μμΈκ°μ?
π€ μ μΈνμ§ μμ μλ³μμ κ°μ ν λΉνλ©΄ μ μ κ°μ²΄μ νλ‘νΌν°κ° λ
βοΈ var
β λ³μμ μ€λ³΅ μ μΈμ΄ κ°λ₯ν΄μ side effect λ°μ κ°λ₯μ± ↑
β ν¨μ λ 벨 μ€μ½ν(μ€λ‘μ§ ν¨μμ μ½λ λΈλ‘λ§μ μ§μ μ€μ½νλ‘ μΈμ νλ€. )μ΄κΈ° λλ¬Έμ ν¨μ μΈλΆμμ var ν€μλλ‘ μ μΈν λ³μλ μ½λλΈλ‘ λ΄μμ μ μΈν΄λ λͺ¨λ μ μ λ³μκ° λλ€. side effect λ°μ κ°λ₯μ± ↑
var i = 10;
for(var i = 0; i < 5; i++){
console.log(i); // 0,1,2,3,4
}
console.log(i); // 5 (4κΉμ§ μ½μμ μ°κ³ i++κ° λκ³ μ‘°κ±΄μμμ falseκ° λμ forλ¬Έμ΄ μ’
λ£λ¨.)
β νΈμ΄μ€ν μ μν΄ λ³μ μ μΈλ¬Έμ΄ μ€μ½νμ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμνλ€. κ·Έλμ var ν€μλλ‘ μ μΈν λ³μλ λ³μ μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°ν μ μλ€. (λ¨, ν λΉλ¬Έ μ΄μ μ λ³μλ₯Ό μ°Έμ‘°νλ©΄ undefinedλ₯Ό λ°ννλ€. )
μ리λ₯Ό μ΄ν΄νμ π var ν€μλλ‘ μ μΈν λ³μλ μ μΈκ³Ό μ΄κΈ°νκ° λμμ μ§νλλ€. μ μΈ λ¨κ³μμ μ€μ½ν(μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½)μ λ³μ μλ³μλ₯Ό λ±λ‘ν΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μ‘΄μ¬λ₯Ό μλ¦°λ€. κ·Έλ¦¬κ³ μ¦μ μ΄κΈ°ν λ¨κ³μμ undefinedλ‘ λ³μλ₯Ό μ΄κΈ°ννλ€. λ°λΌμ λ³μ μ μΈλ¬Έ μ΄μ μ λ³μμ μ κ·Όν΄λ μ€μ½νμ λ³μκ° μ‘΄μ¬νκΈ° λλ¬Έμ μλ¬κ° λ°μνμ§ μκ³ undefinedλ₯Ό λ°ννλ€.
β var ν€μλλ‘ μ μΈν μ μ λ³μμ μ μ ν¨μ, μ μΈνμ§ μμ λ³μμ κ°μ ν λΉν μ묡μ μ μμ μ μ κ°μ²΄ windowμ νλ‘νΌν°κ° λλ€.
(μ μ κ°μ²΄μ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν λ windowλ₯Ό μλ΅ν μ μλ€. )
// μ΄ μμ λ λΈλΌμ°μ νκ²½μμ μ€νν΄μΌ νλ€.
var x = 1;
y = 2; // μ묡μ μ μ
function foo() {}
console.log(window.x); // 1
console.log(x); // 1
console.log(window.y); // 2
console.log(y); // 2
console.log(window.foo); // f foo() {}
console.log(foo); // f foo() {}
π‘varμ μ묡μ μ μπ‘
var x = 10; // μ μ λ³μ
function foo () {
y = 20; // window.y = 20;
}
foo();
console.log(x+y); // 30
π foo ν¨μ λ΄μ yλ μ μΈνμ§ μμ μλ³μμ΄λ€. κ·Έλμ y = 20μ΄ μ€νλλ©΄ μ°Έμ‘° μλ¬κ° λ°μν κ±°λΌκ³ μκ°νλ€. νμ§λ§ μ μΈνμ§ μμ μλ³μ yλ λ§μΉ μ μΈλ μ μ λ³μμ²λΌ λμνλ€. μλλ©΄ μ μΈνμ§ μμ μλ³μμ κ°μ ν λΉνλ©΄ μ μ κ°μ²΄μ νλ‘νΌν°κ° λκΈ° λλ¬Έμ΄λ€..
yλ λ¨μ§ μ μ κ°μ²΄μ νλ‘νΌν°λ‘ μΆκ°λμμ λΏμ΄λΌ λ³μκ° μλλ€. κ·Έλμ νΈμ΄μ€ν μ΄ μΌμ΄λμ§ μλλ€...!
μλ°μ€ν¬λ¦½νΈμ μ΄λ©μ΄μ§ν λ¬Έλ²μ΄λΌκ³ μκ°νλ€...
βοΈ let
β μ€λ³΅ μ μΈ κΈμ§
β λΈλ‘ λ 벨 μ€μ½νμ΄λ―λ‘ λͺ¨λ μ½λ λΈλ‘(ν¨μ, if λ¬Έ, forλ¬Έ, whileλ¬Έ, try/catch λ¬Έ λ±) μ μ§μ μ€μ½νλ‘ μΈμ νλ€.
let foo = 1; // μ μ λ³μ
{
let foo = 2; // μ§μ λ³μ
let bar = 3; // μ§μ λ³μ
}
console.log(foo); // 1
console.log(bar); // μ°Έμ‘° μλ¬
β let ν€μλλ‘ μ μΈν λ³μλ μ μΈκ³Ό μ΄κΈ°νκ° λΆλ¦¬λμ μ§νλλ€. (λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ μ μΈ λ¨κ³κ° λ¨Όμ μ€νλμ§λ§, μ΄κΈ°νλ λ³μ μ μΈλ¬Έμ λλ¬νμ λ μ€νλλ€. )
μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν μμ μ§μ κΉμ§ λ³μλ₯Ό μ°Έμ‘°ν μ μλ ꡬκ°μ TDZ(temporal dead zone)μ΄λΌκ³ νλ€.
βοΈ const
β const ν€μλλ‘ μ μΈν λ³μλ μ μΈκ³Ό λμμ μ΄κΈ°νλ₯Ό ν΄μΌνλ€.
const foo; // syntaxError
β let ν€μλμ κ°μ΄ λΈλ‘ λ 벨 μ€μ½νλ₯Ό κ°μ§λ€.
β const ν€μλλ‘ μ μΈλ λ³μμ μμ κ°μ ν λΉν κ²½μ° μμ κ°μ λ³κ²½ν μ μλ κ°μ΄κ³ const ν€μλμ μν΄ μ¬ν λΉμ΄ κΈμ§λλ―λ‘ ν λΉλ κ°μ λ³κ²½ν μ μλ λ°©λ²μ μλ€.
β μμλ₯Ό μ μΈν λ μ μ©νκ² μ°μΈλ€. μλλ©΄ μ μ§λ³΄μμ μ’μμ!π₯ (λλ¬Έμλ‘ μ μΈν΄μ μμμμ λͺ ννκ² λνλ΄μ!!)
β const ν€μλλ‘ μ μΈλ λ³μμ κ°μ²΄λ₯Ό ν λΉν κ²½μ° κ°μ λ³κ²½ν μ μλ€. (μ¬ν λΉ μμ΄ μ§μ λ³κ²½μ΄ κ°λ₯νλκΉ)
const person = {
name: 'Lee'
}
person.name = 'Kim';
console.log(person); // name: 'Kim'
π©π» λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Diveλ₯Ό μ λ νκ³ μ κ° μ΄ν΄ν λ΄μ©μ μ 리ν κΈμ λλ€ π©π»
'πLanguage > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Deep Dive] ν΄λ‘μ μ λ μ컬μ€μ½ν (0) | 2022.12.12 |
---|---|
[Deep Dive] this (0) | 2022.12.07 |
[Deep Dive] μ€ν 컨ν μ€νΈ (0) | 2022.12.05 |
[Deep Dive] μ μ λ³μμ λ¬Έμ μ (0) | 2022.12.05 |
[Deep Dive] μ€μ½νμ μ€μ½ν μ²΄μΈ (0) | 2022.12.02 |