μλ°μ€ν¬λ¦½νΈμμ λ³μλ₯Ό μ μΈνλ λ°©λ²μ var, let, const μΈ κ°μ§κ° μμ΅λλ€. ES5κΉμ§ varκ° μ μΌν λ³μ μ μΈλ¬Έμ΄μμ§λ§, ES6 μ΄ν var μ¬μ©μ μ§μνκ³ let, constλ₯Ό μ¬μ©ν©λλ€.
κ·Έ μ΄μ λ μλμ κ°μ΅λλ€.
- varλ λ³μμ μ€λ³΅μ μΈμ΄ κ°λ₯ν©λλ€.
- λ³μ νΈμ΄μ€ν (hoisting)μ΄ λ°μνμ¬, λ³μ μ μΈμ΄μ μλ μ¬μ©μ΄ κ°λ₯ν©λλ€.
- varλ ν¨μλ 벨 μ€μ½νλΌ, ν¨μ λ΄λΆμ λ³μ μΈμλ λͺ¨λ μ μ λ³μκ° λλ²λ¦½λλ€.
ν΄λΉ νλͺ©λ€μ΄ μ΄λ€ λ¬Έμ κ° μκΈ°λμ§ νλμ© μμλ³΄κ² μ΅λλ€.
λ³μ μ€λ³΅ μ μΈ
varλ κ°μ μ΄λ¦μΌλ‘ μ€λ³΅μ μΈμ΄ κ°λ₯ν©λλ€. μ€λ³΅μ μΈμ νκ² λλ€λ©΄, μλμΉ μκ² κ°μ΄ λ³κ²½λ μ μκ³ , μ΄λ μ€λ₯λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
var name = jin;
var name = kim;
var age = 20;
var age; // μ΄κΈ°νλ¬Έμ΄ μλ€λ©΄ λ³μ μ μΈλ¬Έμ 무μλ©λλ€.
console.log(name); // kim
console.log(age); // 20
let name = jin;
let name = kim; // Uncaught SyntaxError: Identifier 'name' has already been declared
νΈμ΄μ€ν
varλ‘ μ μΈλ λ³μλ λ³μ νΈμ΄μ€ν μ μν΄ λ³μ μ μΈλ¬Έμ΄ μ€μ½νμ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμν©λλ€.
console.log(hi); // undefined
var hi;
hi = 100;
console.log(hi); // 100
첫 λ²μ§Έ μ€μ λ³μ hiλ₯Ό νΈμΆνμ΅λλ€. μ°Έμ‘°ν λ³μκ° μμ΄ μ°Έμ‘° μλ¬κ° λ°μν΄μΌνμ§λ§, undefinedμ΄ μΆλ ₯λ©λλ€. κ·Έ μ΄μ λ μλ°μ€ν¬λ¦½νΈ μμ§μ λμ κ³Όμ λλ¬Έμ λλ€.
- μλ°μ€ν¬λ¦½νΈ μμ§ λμ κ³Όμ
μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ½λλ₯Ό μ€ννκΈ° μ μ, λ¨Όμ μ€νλμ΄ μμ€μ½λμ νκ° κ³Όμ μ κ±°μΉ©λλ€.
νκ° κ³Όμ μμ μλ°μ€ν¬λ¦½νΈ μμ§μ var, let, const, function, class λ±μ μμ€ μ½λμμ μ°Ύμλ΄ λ¨Όμ μ€νν©λλ€.
νκ° κ³Όμ μ΄ λλ μ΄ν, μμμλΆν° μ°¨λ‘λλ‘ νμ€μ© μ½λλ₯Ό μ€νν©λλ€.
λ³μ μ μΈμ΄ μ΄λμ μ‘΄μ¬νλ μ΄λμλ λ³μλ₯Ό μ°Έμ‘°ν μ μκΈ° λλ¬Έμ, λ³μ μ μΈλ¬Έμ΄ μ½λμ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμνλ μλ°μ€ν¬λ¦½νΈμ κ³ μ μ νΉμ§μ νΈμ΄μ€ν (hoisting)μ΄λΌκ³ ν©λλ€.
varκ° μλ letμΌλ‘ μ€ννλ©΄ μ΄λ»κ² λ κΉμ?
console.log(hi); // ReferenceError: hi is not defined
let hi; // λ³μ μ μΈλ¬Έμμ μ΄κΈ°ν λ¨κ³κ° μ€νλ©λλ€.
console.log(hi); // undefined
hi = 100; // λ³μ ν λΉ
console.log(hi); // 100
첫λ²μ§Έ μ½λμμ μ°Έμ‘°μλ¬κ° λ°μνμ΅λλ€. μλ°μ€ν¬λ¦½νΈ μμ§ λμκ³Όμ μμ letμΌλ‘ μ μΈλ hiλΌλ λ³μλ νΈμ΄μ€ν λμμ§λ§, μ΄κΈ°νλ μμ§λμ§ μμμ΅λλ€. let ν€μλλ λ³μ μ μΈλ¨κ³μ μ΄κΈ°νλ¨κ³κ° λΆλ¦¬λκ³ , λ³μ μ΄κΈ°ν μ μ λ³μμ μ κ·Όν μ μκΈ° λλ¬Έμ μμ κ°μ μλ¬κ° λ°μνμ΅λλ€. (varλ λ³μμ μΈμ μ΄κΈ°ν λ¨κ³κ° λ°λ‘ μ§νλ©λλ€.)
μ¦, letμΌλ‘ μ μΈν μ€μ½νλ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μ²λΌ 보μ λλ€.
μ€μ½ν
varλ‘ μ μΈλ λ³μλ μ€λ‘μ§ ν¨μ λΈλ‘λ§ μ§μ μ€μ½νλ‘ μΈμ ν©λλ€. ifλ¬Έ, forλ¬Έ λ±μ κ²½μ°μλ μ΄λμλ μ°Έμ‘° κ°λ₯ν μ μ λ³μκ° λ©λλ€.
var a = 10;
if (true) {
// ν¨μ λΈλ‘μ΄ μλκΈ° λλ¬Έμ, μλ aλ μ μλ³μμ΄κ³ , μμ μ μΈλ aκ° μκΈ° λλ¬Έμ, μ€λ³΅μ μΈμ΄ λ©λλ€.
var a = 100;
}
console.log(a); // 100
letμΌλ‘ μ μΈλ λ³μλ λΈλ‘ λ 벨 μ€μ½νλ₯Ό λ°λ¦ λλ€.
let a = 10; // μ μλ³μ
if (true) {
let a = 100; // μ§μλ³μ
let b = 200; // μ§μλ³μ
}
console.log(a); // 10
console.log(b); // Uncaught ReferenceError: b is not defined
μμ½
λ³μμ μ ν¨ λ²μκ° ν¬λ©΄ ν΄μλ‘ μ½λμ κ°λ μ±μ λλΉ μ§κ³ , μλμΉ μκ² μνκ° λ³κ²½λ μ μλ μνμ΄ μκΈ° λλ¬Έμ, λ³μμ μ€μ½νλ μ’μμλ‘ μ’μ΅λλ€. κ·Έλ κΈ° λλ¬Έμ, var λμ let, const(λ³νμ§ μλ κ°μ constλ₯Ό μ¬μ©νμ§λ§ μ°μ κΈ°λ³Έμ μΌλ‘ constλ₯Ό μ¬μ©νκ³ , μ¬ν λΉμ΄ νμν κ²½μ° letμ μ¬μ©)λ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.