var
ν€μλμ λ¬Έμ μ μ μ΄μ μΆ©λΆν μμκ°κ³ μλ€μ. κ·ΈλΌ μ΄ λ¬Έμ λ₯Ό μ΄λ»κ²νλ©΄ μ¬κΈ°λ‘κ² ν΄κ²°ν μ μμκΉμ? μ§κΈκΉμ§λ λ§μ΄ μΌκ² μ§λ§, ES6μμ λ±μ₯ν let
, const
λ₯Ό 본격μ μΌλ‘ λ€μ¬λ€ λ³Ό λμ
λλ€!
ES5κΉμ§λ var ν€μλλ‘λ§ λ³μλ₯Ό μ μΈνκ³ , μ΄λ λ§μ λ¬Έμ μ μ΄ μμμ΅λλ€.
var ν€μλλ‘ μ μΈν λ³μκ° κ°μ§ λ¬Έμ μ μ μλμ κ°μ΅λλ€.
- λ³μ μ€λ³΅ μ μΈ
νμ©
- ν¨μ λ 벨 μ€μ½ν,
function() {}
- λ³μ νΈμ΄μ€ν
μΌλ‘
λ³μ μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°κ° κ°λ₯
νλ©°, ν λΉλ¬Έ μ΄μ μ μ°Έμ‘° μ undefinedλ₯Ό λ°ν 4.μ μ λ³μ
,μ μ ν¨μ
, μ μΈνμ§ μμ λ³μμ κ°μ ν λΉνμ묡μ μ μ
μ μ μ κ°μ²΄ windowμ νλ‘νΌν°μ ν λΉ
μ΄λ° μ΄μ λ‘ κ°λ μ±, κ°λ°μμ μλκ° νλ €μ§κ² λμκ³ κ²°κ΅ letκ³Ό constκ° λ±μ₯νκ² λ©λλ€.
ES6μ μΆκ°λ λΈλ‘ λ 벨 μ€μ½νμ μ¬ν λΉμ΄ κ°λ₯ν ν€μλμ λλ€.
let ν€μλλ‘ μ μΈν λ³μλ var ν€μλλ₯Ό λ체ν μ μμΌλ©°, μλμ κ°μ νΉμ§μ κ°μ΅λλ€.
- λ³μ μ€λ³΅ μ μΈ
κΈμ§
, μ€λ³΅ μ μΈ μ λ¬Έλ² μλ¬(SyntaxError) λ°μ - ν¨μ λ 벨 μ€μ½ν,
function() {}, if λ¬Έ, for λ¬Έ, while λ¬Έ, try/catch λ¬Έ λ±
- λ³μ νΈμ΄μ€ν
μ΄
λ°μνμ§ μλ
κ²μ²λΌ λμ// 1 ===================================== console.log(foo); // ReferenceError: foo is not defined let foo; console.log(foo); // undefined foo = 1; console.log(foo); // 1 // 2 ===================================== // μ μ λ³μ let foo = 1; { console.log(foo); // ReferenceError: Cannot access 'foo' before initialization // μ§μ λ³μ let foo = 2; }
- μ μ κ°μ²΄ windowμ νλ‘νΌν°κ° μλλ©° let μ μ λ³μλ
보μ΄μ§ μλ κ°λ μ λΈλ‘(μ μ λ μ컬 νκ²½μ μ μΈμ νκ²½ λ μ½λ)
λ΄μ μ‘΄μ¬
μ μ¬ν 보μμΌ νλ κ²μ 3λ² νλͺ©μ
λλ€. λ³μ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλλ€
? μλμ, let, const ν€μλλ‘ μ μΈν λ³μλ λ³μ νΈμ΄μ€ν
μ λ°μν©λλ€
. κ·Έλ¬λ λ΄λΆμ μΈ μ²λ¦¬κ° νλ €μ.
μ, var ν€μλμ let, const ν€μλλ λ³μμ μλͺ
μ£ΌκΈ°
κ° λ€λ₯΄κ² λμλ©λλ€. μ°λ¦¬λ λ³μλ₯Ό λ°°μ°λ©΄μ λ³μ μ μΈ
μ λν΄ μ΄ν΄νκ³ μμν
μ§λ§, ν λ² λ μκ°ν΄λ³ΌκΉμ?
var ν€μλλ‘ μ μΈν λ³μλ λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ μ μΈ λ¨κ³
μ μ΄κΈ°ν λ¨κ³
κ° λμμ μ§νλ©λλ€. μμ λ‘ μ΄ν΄ ν΄λ΄
μλ€.
/**
* var ν€μλλ‘ μ μΈν λ³μλ λ°νμ μ΄μ μ
* μ μΈ λ° μ΄κΈ°ν λ¨κ³κ° μ€νλ©λλ€.
* λ°λΌμ λ³μ μ μΈλ¬Έ μ΄μ μ λ³μ μ°Έμ‘°ν μ μμ΅λλ€.
*/
console.log(foo); // undefined
var foo;
console.log(foo); // undefined
// ν λΉλ¬Έμμ ν λΉ λ¨κ³κ° μ€νλ©λλ€.
foo = 1;
console.log(foo); // 1
λ°λ©΄ let, const ν€μλλ‘ μ μΈν λ³μλ μ μΈ λ¨κ³
μ μ΄κΈ°ν λ¨κ³
κ° λΆλ¦¬λμ΄ μ§νλ©λλ€.
μ¦, λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ μ μΈ λ¨κ³κ° λ¨Όμ μ€νλκ³ , μ΄κΈ°ν λ¨κ³κ° λ³μ μ μΈλ¬Έμ λλ¬νμ λ μ€νλ©λλ€.
// λ°νμ μ΄μ μ μ μΈ λ¨κ³κ° μ€νλμ§λ§ λ³μλ μ΄κΈ°νλμ§ μμ΅λλ€.
console.log(foo); // ReferenceError: foo is not defined
let foo;
console.log(foo); // undefined
foo = 1;
console.log(foo); // 1
μ΄κΈ°ν λ¨κ³ μ΄μ μ λ³μμ μ κ·Όνλ €κ³ νλ©΄ μ°Έμ‘° μλ¬(Reference Error)κ° λ°μνμ£ . μ΄λ κ² μ€μ½νμ μμμ§μ λΆν° μ΄κΈ°ν μμ μ§μ κΉμ§
λ³μλ₯Ό μ°Έμ‘°ν μ μλ ꡬκ°μ μΌμμ μ¬κ°μ§λ(TDZ, Temporal Dead Zone) λΌκ³ λΆλ¦
λλ€.
let ν€μλλ‘ μ μΈν λ³μλ μ¬μ ν νΈμ΄μ€ν μ΄ λ°μν©λλ€. μμ μμ λ₯Ό λ€μ λ³ΌκΉμ?
// μ μ λ³μ
let foo = 1;
{
console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
let foo = 2;
}
λ³μ νΈμ΄μ€ν
μ΄ λ°μνμ§ μμλ€λ©΄, μ μ½λμμλ μ μλ³μ foo
μ κ°μ μΆλ ₯ν΄μΌ ν©λλ€. κ·Έλ¬λ μ°Έμ‘° μλ¬κ° λ°μνμ£ ? μ΄λ μ§μ λ³μλ‘ μ μΈν fooλ₯Ό μΆλ ₯νκΈ° μν΄ μ μΈλ¬Έ μ΄μ μ μ κ·ΌνκΈ° λλ¬Έμ
λλ€.
μλ°μ€ν¬λ¦½νΈλ ES6μ λμ
λ let, constλ₯Ό ν¬ν¨ν λͺ¨λ μ μΈμ νΈμ΄μ€ν
νμ§λ§, let
, const
,class
λ§μ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλ κ²μ²λΌ λμν©λλ€.
ES6μ μΆκ°λ λΈλ‘ λ 벨 μ€μ½νμ μ¬ν λΉ λΆκ°λ₯ν μμ(constant)λ₯Ό μ μΈνλ ν€μλμ λλ€.
const ν€μλλ κΈ°λ³Έμ μΌλ‘ letκ³Ό λμΌνκ² λμν©λλ€. λ€λ₯Έ μ μ λ°λμ μ μΈκ³Ό λμμ μ΄κΈ°ν
ν΄μΌ νλ€λ κ²μ΄μμ.
const foo = 1;
foo = 2; // TypeError: Assignment to constant variable.
μ΄μ λ μμ κ°μ΅λλ€. const ν€μλλ‘ μ μΈν λ³μλ μ¬ν λΉμ΄ κΈμ§λκΈ° λλ¬Έμ΄μ£ .
λ³μλ κΈ°λ³Έμ μΌλ‘ λ³κ²½μ΄ κ°λ₯ν κ°μ λ»ν©λλ€. κ·Έμ μλ κ°λ μΈ μμλ μ¬ν λΉμ΄ κΈμ§λ λ³μλ₯Ό λ»ν©λλ€. μμλ μν μ μ§, κ°λ μ±, μ μ§λ³΄μμ νΈμλ₯Ό μν΄ μ κ·Ήμ μΌλ‘ μ¬μ©νκΈ°λ₯Ό κΆμ₯ν©λλ€. μ¬ν λΉμ΄ κΈμ§λμμΌλ―λ‘ ν λΉλ μ΄κΈ°κ°μ λ³κ²½ν μ μλ λ°©λ²μ μμ΅λλ€.
μΌλ°μ μΌλ‘ μμλ λλ¬Έμλ‘ μ μΈνκ³ , μ¬λ¬ λ¨μ΄λ‘ μ΄λ€μ§ κ²½μ° μΈλμ€μ½μ΄(_
)λ‘ κ΅¬λΆν΄ μμμμ λͺ
νν λνλ
λλ€. μλμ²λΌ λ§μ΄μ£ !
const TAX_RATE = 0.1;
let preTaxPrice = 100;
let afterTaxPrice = preTaxPrice + (preTaxPrice * TAX_RATE);
console.log(afterTaxPrice); // 110
μ¬κΈ°μ μ°©κ°νμ§ λ§μμΌ ν κ²μ, constλ‘ μ μΈν κ°μ²΄μ κ²½μ°, κ°μ²΄ μ체λ₯Ό λ³κ²½νλ κ²μ κΈμ§λλ κ°μ²΄ λ΄λΆμ κ°μ λ³κ²½νλ κ²μ κ°λ₯ν©λλ€. μ΄λ const ν€μλκ° μ¬ν λΉμ κΈμ§νλ κ²μ΄μ§ λΆλ³
μ μλ―Ένλ κ²μ μλκΈ° λλ¬Έμ
λλ€. μ¦ νλ‘νΌν°μ λμ μμ±, μμ , νλ‘νΌν° κ° μμ μ ν΅ν΄ κ°μ²΄λ₯Ό λ³κ²½νλ κ²
μ κ°λ₯νκ² λ©λλ€.
λ¬Όλ‘ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μ£Όμκ° λ³κ²½λ μ μμ΅λλ€.
λ³μ μ μΈμ κΈ°λ³Έμ μΌλ‘ constλ₯Ό μ¬μ©νκ³ μ¬ν λΉμ΄ νμν κ²½μ°λ§ letμ μ°λλ‘ ν©μλ€.
κΆμ₯μ΄μ§λ§ μ¬λ¬ μν©μ λν΄ ν΅μ©λλ λ΄μ©μ λλ€.
- ES6λ₯Ό μ¬μ©νλ©΄ var ν€μλλ μ°μ§ μμ΅λλ€.
- μ¬ν λΉμ΄ νμνλ©΄ let, κ·Έ μΈμλ constλ₯Ό μλλ€.
- μ μ λ³μλ₯Ό λ¨μ©νμ§ μμ΅λλ€.