μλ°μ€ν¬λ¦½νΈ λ³μλ νλ‘κ·Έλλ°μ ν΅μ¬ μμλ‘, λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ‘°μνλ λ° νμμ μΈ μν μ ν©λλ€. μ΄λ² ν¬μ€ν μμλ μλ°μ€ν¬λ¦½νΈμμ λ³μλ₯Ό μ μΈνκ³ μ¬μ©νλ λ°©λ²μ μμΈν μ€λͺ νκ³ , var, let, constμ μ°¨μ΄μ μ λͺ ννκ² λΆμν΄ λ³΄κ² μ΅λλ€.
β£ λͺ©μ°¨
01. μλ°μ€ν¬λ¦½νΈ λ³μλ?π
λ¨Όμ , λ³μλ 무μμΌκΉμ? κ°λ¨ν λ§ν΄, λ³μλ κ°μ μ μ₯ν μ μλ 곡κ°μ λλ€. λ³μλ λ°μ΄ν°λ₯Ό μ μ₯νκ³ , κ·Έ λ°μ΄ν°λ₯Ό νμν λ λ€μ μ¬μ©ν μ μκ² ν΄ μ€λλ€. μλ°μ€ν¬λ¦½νΈμμ λ³μλ λ€μν νμ μ λ°μ΄ν°λ₯Ό μ μ₯ν μ μμΌλ©°, μ΄λ¬ν μ μ°μ± λλΆμ λ€μν μν©μμ νμ©ν μ μμ΅λλ€.
02. λ³μ μ μΈ λ°©λ²βοΈ
μλ°μ€ν¬λ¦½νΈμμ λ³μλ₯Ό μ μΈνλ λ°©λ²μ μΈ κ°μ§κ° μμ΅λλ€: var, let, const. κ°κ°μ ν€μλλ λ³μμ μ μΈκ³Ό μ¬μ©μ μμ΄μ κ³ μ ν νΉμ±μ κ°μ§κ³ μμ΅λλ€.
- var: κ°μ₯ μ€λλ λ³μ μ μΈ λ°©λ²μ λλ€.
var x = 10;
console.log(x); // 10
- let: ES6(ECMAScript 2015)μμ λμ λ λ³μ μ μΈ λ°©λ²μ λλ€.
let y = 20;
console.log(y); // 20
- const: μμ ES6μμ λμ λμμΌλ©°, μμ(constant)λ₯Ό μ μΈν λ μ¬μ©λ©λλ€.
const z = 30;
console.log(z); // 30
03. var, let, const μ°¨μ΄μ βοΈ
μ΄μ var, let, constμ μ°¨μ΄μ μ μ’ λ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€.
var
varλ κ°μ₯ μ€λλ λ³μ μ μΈ λ°©λ²μΌλ‘, ES6 μ΄μ λΆν° μ¬μ©λμμ΅λλ€. κ·Έλ¬λ λͺ κ°μ§ νΉμ± λλ¬Έμ νλ μλ°μ€ν¬λ¦½νΈμμλ μ μ¬μ©λμ§ μμ΅λλ€.
νΉμ±
- ν¨μ μ€μ½ν(Function Scope): varλ‘ μ μΈλ λ³μλ ν¨μ λ΄μμ μ ν¨ν©λλ€. ν¨μ λ°μμλ μ κ·Όν μ μμ΅λλ€.
- νΈμ΄μ€ν (Hoisting): varλ‘ μ μΈλ λ³μλ μ μΈ μμΉμ μκ΄μμ΄ ν¨μ λλ μ μ μ€μ½νμ μ΅μλ¨μΌλ‘ λμ΄μ¬λ €μ§λλ€. λ¨, μ΄κΈ°νλ νΈμ΄μ€ν λμ§ μμ΅λλ€.
μμ
console.log(a); // undefined
var a = 10;
console.log(a); // 10
function testVar() {
var x = 1;
if (true) {
var x = 2; // λμΌν λ³μ
console.log(x); // 2
}
console.log(x); // 2
}
testVar();
let
letμ ES6μμ λμ λ λ³μ μ μΈ λ°©λ²μΌλ‘, varμ λͺ κ°μ§ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
νΉμ±
- λΈλ‘ μ€μ½ν(Block Scope): letμΌλ‘ μ μΈλ λ³μλ λΈλ‘({}) λ΄λΆμμλ§ μ ν¨ν©λλ€. λΈλ‘ λ°κΉ₯μμλ μ κ·Όν μ μμ΅λλ€.
- μ¬ν λΉ κ°λ₯: letμΌλ‘ μ μΈλ λ³μλ λμ€μ λ€λ₯Έ κ°μΌλ‘ μ¬ν λΉν μ μμ΅λλ€.
- νΈμ΄μ€ν (Hoisting): letλ νΈμ΄μ€ν λμ§λ§, μ μΈ μ μ μ κ·Όνλ©΄ ReferenceErrorκ° λ°μν©λλ€. μ΄λ "Temporal Dead Zone(TDZ)" μ¦, μΌμμ μ¬κ°μ§λ λλ¬Έμ λλ€.
μμ
console.log(b); // ReferenceError
let b = 20;
console.log(b); // 20
function testLet() {
let y = 1;
if (true) {
let y = 2; // λ€λ₯Έ λ³μ
console.log(y); // 2
}
console.log(y); // 1
}
testLet();
const
constλ ES6μμ λμ λμμΌλ©°, μμ(constant) μ μΈμ μ¬μ©λ©λλ€. ν λ² κ°μ΄ ν λΉλλ©΄ λ³κ²½ν μ μμ΅λλ€.
νΉμ±
- λΈλ‘ μ€μ½ν(Block Scope): constλ‘ μ μΈλ λ³μλ λΈλ‘({}) λ΄λΆμμλ§ μ ν¨ν©λλ€.
- μ¬ν λΉ λΆκ°: constλ‘ μ μΈλ λ³μλ λμ€μ λ€λ₯Έ κ°μΌλ‘ μ¬ν λΉν μ μμ΅λλ€.
- νΈμ΄μ€ν (Hoisting): constλ νΈμ΄μ€ν λμ§λ§, μ μΈ μ μ μ κ·Όνλ©΄ ReferenceErrorκ° λ°μν©λλ€. μ΄λ "Temporal Dead Zone(TDZ)" μ¦, μΌμμ μ¬κ°μ§λ λλ¬Έμ λλ€.
μμ
console.log(c); // ReferenceError
const c = 30;
console.log(c); // 30
function testConst() {
const z = 1;
if (true) {
const z = 2; // λ€λ₯Έ λ³μ
console.log(z); // 2
}
console.log(z); // 1
}
testConst();
// μ¬ν λΉ λΆκ° μμ
const d = 40;
d = 50; // TypeError
πμ¬κΈ°μ μ κΉ!
Temporal Dead Zone(TDZ)μ΄λ?
letκ³Ό const ν€μλκ° ES6(ECMAScript 2015)μμ λμ
λλ©΄μ μκΈ΄ κ°λ
μ
λλ€.
TDZλ letκ³Ό const ν€μλλ‘ μ μΈλ λ³μκ° μ΄κΈ°νλκΈ° μ κΉμ§ μ κ·Όν μ μλ ꡬκ°μ μλ―Έν©λλ€. μ΄λ μ½λμ μμ μ±κ³Ό κ°λ
μ±μ λμ΄λ©°, μ΄κΈ°ν μ μ λ³μμ μ κ·Όνλ €λ μ€μλ₯Ό λ°©μ§ν©λλ€. TDZλ₯Ό μ΄ν΄νκ³ νμ©νλ©΄, μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μμ±ν λ λ³΄λ€ λͺ
ννκ³ μ€λ₯ μλ μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
var, let, const μ€ λ¬΄μμ μ¬μ©ν΄μΌ ν κΉμ?
- κΈ°λ³Έμ μΌλ‘λ constλ₯Ό μ¬μ©νκ³ , κ°μ΄ λ³κ²½λ νμκ° μλ κ²½μ°μλ§ letμ μ¬μ©νμΈμ. varλ μ¬μ©νμ§ μλ κ²μ΄ μ’μ΅λλ€.
μ varλ₯Ό μ¬μ©νλ©΄ μ λ κΉμ?
- varλ ν¨μ μ€μ½νμ νΈμ΄μ€ν λ¬Έμ λ‘ μΈν΄ μκΈ°μΉ μμ λ²κ·Έλ₯Ό μ λ°ν μ μμ΅λλ€.
04. λ³μ μ΄κΈ°νμ ν λΉπ―;
λ³μ μ μΈκ³Ό λμμ κ°μ μ΄κΈ°νν μ μμΌλ©°, λμ€μ κ°μ μ¬ν λΉν μλ μμ΅λλ€.
μ΄κΈ°ν μμ
let name = "John";
console.log(name); // John
μ¬ν λΉ μμ
let age = 25;
age = 26;
console.log(age); // 26
constμ μμΈ μ²λ¦¬
const country = "Korea";
country = "USA"; // μ€λ₯ λ°μ
05. λ³μλͺ μμ± κ·μΉπ
λ³μλͺ
μ μμ±ν λμλ λͺ κ°μ§ κ·μΉμ λ°λ₯΄λ κ²μ΄ μ’μ΅λλ€. μ΄λ μ½λμ κ°λ
μ±μ λμ΄κ³ μ μ§λ³΄μλ₯Ό μ©μ΄νκ² λ§λλλ€.
1. μλ―Έ μλ μ΄λ¦ μ¬μ©:
- λ³μλͺ μ λ³μμ μν μ΄λ μλ―Έλ₯Ό μ λνλ΄μΌ ν©λλ€.
let totalPrice = 100;
2. camelCase μ¬μ©:
- μ¬λ¬ λ¨μ΄λ‘ μ΄λ£¨μ΄μ§ λ³μλͺ μ camelCaseλ₯Ό μ¬μ©ν©λλ€.
let userFirstName = "John";
3. μμ½μ΄ νΌνκΈ°:
- μλ°μ€ν¬λ¦½νΈμ μμ½μ΄λ λ³μλͺ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
// μλͺ»λ μ
let for = 10; // μ€λ₯ λ°μ
06. ν΅μ¬ λ΄μ©π