var
, let
, const
μλ°μ€ν¬λ¦½νΈμμ λ³μλ₯Ό μ μΈνλ λ°©λ²μ μ΄ 3κ°μ§κ° μλ€.
var a = 10;
let b = 100;
const c = 1000;
ES6 μ΄μ μλ var
λ₯Ό μ¬μ©ν΄μ λ³μλ₯Ό μ μΈνμλ€.
ES6 μ΄νμ let
, const
κ° λμ
λμλ€λ κ²μ κΈ°μ‘΄μ var
μ λ¬Έμ μ μ΄ μκ³ μ΄λ₯Ό κ°μ νκΈ° μν΄ μλ‘μ΄ λ¬Έλ²μ΄ λ±μ₯νλ€κ³ μκ°ν μ μλ€.
varμ λ¬Έμ μ
1. μ€λ³΅ μ μΈμ΄ κ°λ₯νλ€
μ€λ³΅ μ μΈμ΄λ, λμΌν μ€μ½ν λ΄μ λμΌν μλ³μκ° 2κ° μ΄μ μ‘΄μ¬νλ κ²μ λ»νλ€.
var ν€μλλ‘ μ μΈλ λ³μλ κ°μ μ€μ½ν λ΄μ μ€λ³΅ μ μΈνμ¬λ μλ¬κ° λ°μνμ§ μλλ€.
var x = 1;
var x = 100;
console.log(x); // 100
μ μ½λκ° μ λλ‘ λμνλ μ΄μ
- μ΄κΈ°νλ¬Έμ΄ μλ κ²½μ°, μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ var ν€μλκ° μλ κ²μ²λΌ λμνλ€.
- μ΄κΈ°νλ¬Έμ΄ μλ κ²½μ°, λ³μ μ μΈλ¬Έμ΄ 무μλλ€
// μ μ½λλ μλμ κ°μ΄ λμνλ€.
var x = 1;
x = 100;
μ€λ³΅ μ μΈμ΄ λ¬Έμ μΈ μ΄μ
- λμΌν μ΄λ¦μΌλ‘ μ μΈν λ³μμ μλ‘μ΄ κ°μ ν λΉν μ μλ€.
- κ°λ°μμ μλμ λ€λ₯΄κ² μ½λκ° λμνλ μν©μ λ§λ λ€. μμΈ‘ν μ μλ μ½λλ λλ²κΉ κ³Ό μ μ§λ³΄μλ₯Ό μ΄λ ΅κ² νλ€.
μλ¬κ° λ°μνμ§ μλλ‘ μ€κ³ν μ΄μ λ 무μμΌκΉ?
μ΄κΈ° μλ°μ€ν¬λ¦½νΈλ λ¨μν μΉ νμ΄μ§μ 보쑰μ μΈ κΈ°λ₯λ§ μννμλ€. λλΆλΆμ μλ°μ€ν¬λ¦½νΈλ μΉ μλ²μμ μ€νλμκ³ μ΄ λ μ€μν κ²μ μλ¬κ° λ°μνμ§ μλ κ²μ΄μλ€. μλ¬κ° λ°μνλ©΄ νμ΄μ§ μ μ²΄κ° λ λλ§μ΄ μλλ λ¬Έμ κ° λ°μν μ μκΈ° λλ¬Έμ΄λ€. λ°λΌμ, μ΅λν "ν¬κ΄μ μΈ" λ¬Έλ²μ νμ©ν κ²μ΄ μλκ° μΆμΈ‘λλ€.
2. ν¨μ λ 벨 μ€μ½ν
varλ‘ μ μΈν λ³μλ ν¨μ λ΄λΆ λλ μΈλΆμμ μ μΈλμλμ§μ λ°λΌ ν¨μ μ€μ½ν λλ μ μ μ€μ½νλ₯Ό κ°μ§λ€.
ν¨μ λ 벨 μ€μ½νλ μ½λ λΈλ‘μ΄ μλ ν¨μμ μν΄μλ§ μ§μ μ€μ½νκ° μμ±λλ€.
var x = 1;
if (true) {
var x = 10;
}
console.log(x); // 10
varλ‘ μ μΈν λ³μλ ν¨μ μ½λ λΈλ‘ λ΄μμλ§ μ ν¨νκΈ° λλ¬Έμ ν¨μ μΈλΆμμ μ μΈν λ³μλ μ½λ λΈλ‘ λ΄μμ μ μΈν΄λ λͺ¨λ μ μλ³μκ° λλ€. μ΄λ, μ€κ΄νΈλ‘ νμλ λΈλ‘μ΄ μ€μ½νλ₯Ό μμ±νμ§ μλλ€λ μ μμ νΌλμ μΌμΌν¬ μ μλ€.
ν¨μ λ 벨 μ€μ½νκ° λ¬Έμ μΈ μ΄μ
- μλμΉ μμ μ μ λ³μμ κ°μ΄ μ¬ν λΉλ μ μλ€.
- μμ μλμ λ€λ₯΄κ² λμνλ μ½λλ λλ²κΉ κ³Ό μ μ§λ³΄μλ₯Ό μ΄λ ΅κ² νλ€.
κ³Όκ±°μ varλ§ μμμ λμλ λΈλ‘ μ€μ½νλ₯Ό ꡬνν μ μμμκΉ?
μ¦μμ€νν¨μλ₯Ό μ¬μ©νλ©΄ varλ₯Ό μ΄μ©ν΄λ λΈλ‘ λ 벨 μ€μ½νλ₯Ό ꡬνν μ μλ€.
(function () {
statements;
})();
- μ¦μμ€νν¨μ(IIFE)λ μ μΈκ³Ό λμμ μ€νλκΈ° λλ¬Έμ λΈλ‘ λ 벨 μ€μ½νλ₯Ό ꡬνν μ μλ€
- λΆνμν μ μλ³μμ μ€μΌμ λ°©μ§ν μ μλ€.
- IIFE λ΄λΆλ‘ λ€λ₯Έ λ³μλ€μ΄ μ κ·Όνλ κ²μ λ§μ μ μλ€.
3. λ³μ νΈμ΄μ€ν
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ μ μΈλ¬Έμ νΈμ΄μ€ν λμ΄ μ€μ½νμ κ°μ₯ μλ‘ λμ΄μ¬λ €μ§ κ²μ²λΌ λμνλ€.
μλ°μ€ν¬λ¦½νΈ μμ§μ μμ€μ½λλ₯Ό μ€νν λ μλμ κ°μ΄ λμνλ€.
1. λͺ¨λ μ μΈλ¬Έμ μμ€μ½λμμ μ°Ύμ λ¨Όμ μ€ννλ€ (μμ€μ½λ νκ° κ³Όμ )
2. λͺ¨λ μ μΈλ¬Έμ μ μΈνκ³ μμ€μ½λλ₯Ό νμ€μ© μ€ννλ€.
console.log(foo); // undefined
var foo;
varλ‘ μ μΈν λ³μλ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ μ μΈ λ¨κ³
μ μ΄κΈ°ν λ¨κ³
κ° λμμ μΌμ΄λλ€.
- μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½(μ€μ½ν)μ λ³μ μλ³μλ₯Ό λ±λ‘νλ€.
- μ΄κΈ°ν λ¨κ³μμ
undefined
λ‘ λ³μλ₯Ό μ΄κΈ°ννλ€.
λ°λΌμ, μ μΈλ¬Έ μ΄μ μ λ³μμ μ κ·Όν΄λ μ€μ½νμ λ³μκ° μ‘΄μ¬νκΈ° λλ¬Έμ undefined
κ° μΆλ ₯λλ€.
λ³μ νΈμ΄μ€ν μ λ¬Έμ μ
- μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°κ° κ°λ₯ν΄μ μ½λμ νλ¦μ΄ 볡μ‘ν΄μ Έ κ°λ μ±μ΄ λ¨μ΄μ§λ€.
- μλμΉ μμ μ€λ₯κ° λ°μν μ μλ€.
varμ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν let, const
varμ λ¬Έμ μ μΌλ‘λ 3κ°μ§κ° μλ€.
- μ€λ³΅ μ μΈμ΄ κ°λ₯νλ€.
- ν¨μ λ 벨 μ€μ½νλ₯Ό κ°λλ€.
- λ³μ νΈμ΄μ€ν μ΄ λ°μνλ€.
μ΄ 3κ°μ§λ₯Ό let, constλ₯Ό ν΅ν΄ μ΄λ»κ² ν΄κ²°νλμ§ μ΄ν΄λ³΄μ.
1. μ€λ³΅ μ μΈ → μ€λ³΅ μ μΈ λΆκ°λ₯
let
ν€μλλ‘ λ³μ μ΄λ¦μ΄ λμΌν λ³μλ₯Ό μ€λ³΅ μ μΈνκ² λλ©΄ Syntax Error
κ° λ°μνλ€.
let bar = 123;
let bar = 456;
// Uncaught SyntaxError: Identifier 'bar' has already been declared
2. ν¨μ λ 벨 μ€μ½ν → λΈλ‘ λ 벨 μ€μ½ν
let μΌλ‘ μ μΈν λ³μμ μ§μ μ€μ½νλ λΈλ‘ λ 벨 μ€μ½νμ΄λ€.
λΈλ‘ λ 벨 μ€μ½νλ λͺ¨λ μ½λ λΈλ‘μ μν΄ μ§μ μ€μ½νκ° μκΈ΄λ€.
- ν¨μ λ 벨 μ€μ½νλ μ½λ λΈλ‘μ μ μΈν λ³μκ° μ μ λ³μκ° λλ€.
- λ°λ©΄μ, λΈλ‘ λ 벨 μ€μ½νλ μ½λ λΈλ‘μ μ μΈν λ³μκ° μ§μ λ³μκ° λλ€.
- λ°λΌμ, μ€λ³΅ μ μΈμ΄λ μ묡μ ν λΉκ³Ό κ°μ μ μ λ³μμ μνμ±μ μ€μΌ μ μλ€.
3. λ³μ νΈμ΄μ€ν → λ³μ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μ²λΌ λμ
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ μ μΈλ¬Έμ νΈμ΄μ€ν μ΄ μΌμ΄λκΈ° λλ¬Έμ let, constλ‘ μ μΈν λ³μ μμ νΈμ΄μ€ν μ΄ λ°μνλ€.
νμ§λ§ let, constλ varμλ λ€λ₯΄κ² νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μ²λΌ λμνλ€.
console.log(foo); // Uncaught ReferenceError: foo is not defined
let foo;
μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° λμμ μΌμ΄λλ var
μλ λ€λ₯΄κ² let
μ μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° λΆλ¦¬λμ΄ μ§νλλ€.
TDZλ μ€μ½ν μμ μ§μ λΆν° μ΄κΈ°ν λ¨κ³ μμ μ§μ (λ³μ μ μΈλ¬Έ)κΉμ§ λ³μλ₯Ό μ°Έμ‘°ν μ μλ ꡬκ°μ λ§νλ€.
μ¦, let μΌλ‘ μ μΈν λ³μλ μ μΈλ¬Έμ λ§λκΈ° μ΄μ κΉμ§ μ°Έμ‘°κ° λΆκ°λ₯νλ€.
μ΄λ»κ² TDZμμ λ³μμ μ κ·Όνλ©΄ μ°Έμ‘° μλ¬κ° λ°μνλ κ²μΌκΉ?
μ°Έμ‘° μλ¬κ° λ°μνλ€λ κ²μ μλ³μλ₯Ό μ°Έμ‘°νλ€λ λ»μ΄λ€.
letμΌλ‘ μ μΈν λ³μ μμ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μ λ±λ‘λλ€. μ΄ λ, λΉ κ°μΌλ‘ λ±λ‘μ΄ λ μ μκΈ° λλ¬Έμ μ΄λ€ νΉμ κ°μ λ£μ΄μ λ±λ‘ν΄μΌνλ€. Symbolκ³Ό κ°μ μ μΌν κ°μΌλ‘ λ±λ‘ν λ€μ μμ§ λ΄λΆμμ ν΄λΉ κ°μ΄ μ°Έμ‘°λ κ²½μ°μλ Reference Errorλ₯Ό λ°μμν¨λ€κ³ μΆμΈ‘ν΄λ³Ό μ μλ€.
νμ§λ§ let, const ν€μλλ‘ μ μΈμ ν΄λ μμ νΈμ΄μ€ν μ΄ λ°μνλ€.
let foo = 1; // μ μ λ³μ
{
console.log(foo); // Uncaught ReferenceError: Cannot access 'foo' before initialization
let foo = 2; // μ§μ λ³μ
}
let μ΄ νΈμ΄μ€ν μ΄ λ°μνμ§ μλλ€λ©΄ μ μ λ³μ fooμ κ°μΈ 1μ΄ μΆλ ₯λμ΄μΌνλ€.
νμ§λ§ μ½λ λΈλ‘ λ΄μμ νΈμ΄μ€ν
μ΄ λ°μνμκΈ° λλ¬Έμ Reference Error
κ° λ°μνλ€.
λ°λΌμ, let, const ν€μλλ‘ μ μΈμ νλ©΄ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μ²λΌ λμν λΏ μ€μ λ‘λ νΈμ΄μ€ν μ΄ λ°μνλ€.
let
vs const
: μ¬ν λΉμ΄ κ°λ₯ν λ³μμΈκ°
let κ³Ό const λ₯Ό μ΄μ©ν΄μ var μ λ¬Έμ μ μ ν΄κ²°ν μ μλ€.
κ·Έλ λ€λ©΄ νλμ ν€μλλ§μΌλ‘λ var μ λ¬Έμ μ μ ν΄κ²°ν μ μμ§ μμκΉ?
μ let
, const
λ κ°μ ν€μλκ° μκ²ΌμκΉ?
μ¬ν λΉμ΄ λΆκ°λ₯ν const
const
λlet
κ³Ό λ€λ₯΄κ² μ¬ν λΉμ΄ λΆκ°λ₯νλ€.const
λ μμλ₯Ό μ μΈνκΈ° μν΄ μ¬μ©νλ€.
μμλ, μ¬ν λΉμ΄ κΈμ§λ λ³μμ΄λ€.
λ³μλ λ©λͺ¨λ¦¬ 곡κ°μ μ΄λ¦μΌ λΏ, μμμ λ°λλλ κ°λ μ΄ μλλ€.
μ¦, λ³μλ "λ³"ν μ μλ "μ"λ₯Ό μλ―Ένλ κ²μ΄ μλλ€.
λ°λΌμ, constλ μ¬ν λΉμ΄ λΆκ°λ₯νλ―λ‘ μ μΈκ³Ό λμμ μ΄κΈ°νλ₯Ό ν΄μ£Όμ΄μΌνλ€.
μμμ νμμ±
- μμλ μ½κΈ° μ μ©μ΄λ€.
- μ¦,
const
λ‘ μ μΈν λ³μλ μ΄νμ μ½λμμ λ³κ²½λμ§ μμΌλ―λ‘ μμ νλ€. - μ΄λ μν μ μ§μ κ°λ μ±, μ μ§λ³΄μλ₯Ό νΈνκ² ν΄μ€λ€.
μ λ§ constλ‘ μ μΈνλ©΄ μ¬ν λΉμ΄ λΆκ°λ₯ν κΉ?
constλ‘ μ μΈν λ³μμ κ°μ²΄λ₯Ό ν λΉν κ²½μ°μ κ°μ λ³κ²½ν μ μλ€.
const person = {
age: 20,
};
person.age = 100;
console.log(person); // {age: 100}
constλ μ¬ν λΉμ κΈμ§ν λΏ "λΆλ³"μ μλ―Ένμ§ μλλ€.
π μμ½
var | let | const | |
---|---|---|---|
μ€λ³΅ μ μΈ | βοΈ | β | β |
μ€μ½ν | ν¨μ λ 벨 μ€μ½ν | λΈλ‘ λ 벨 μ€μ½ν | λΈλ‘ λ 벨 μ€μ½ν |
λ³μ νΈμ΄μ€ν | βοΈ | βοΈ λ°μνμ§ μλ κ²μ²λΌ λμ : Reference Error , TDZ |
βοΈ λ°μνμ§ μλ κ²μ²λΌ λμ : Reference Error , TDZ |
μ¬ν λΉ | βοΈ | βοΈ | β |
κ°μΉνλ¨
- μ΅λν
const
λ₯Ό μ¬μ©νκ³let
μ μ¬μ©ν κ²½μ°μλ μ€μ½νλ₯Ό μ΅λν μ’κ² μ¬μ©ν΄μ£Όμ΄μΌνλ€. var
λ νμνΈν λͺ©μ μ΄ μλλΌλ©΄ μ¬μ©μ μ§μν΄μΌνλ€.
'π©βπ€ νλ‘ νΈμλ > javascript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Javascript][Node.js] Github actionsλ₯Ό μ΄μ©ν΄μ README μλ μ λ°μ΄νΈνκΈ° (0) | 2022.12.02 |
---|---|
[Javascript] νμ΄μ§λ€μ΄μ ꡬννκΈ° (1) | 2022.06.07 |
[Javascript] inputμμ 컀μ 맨 λ€λ‘ μμΉ μν€κΈ° (0) | 2022.06.03 |