μ μΌ μ²μ λ°°μ΄ νλ‘κ·Έλλ° μΈμ΄λ CμΈμ΄μλ€. CμΈμ΄λ λ°μ΄ν° νμ μ λν΄ κ΅μ₯ν μ격νλ°, μλ°μ€ν¬λ¦½νΈλ κ·Έλ° CμΈμ΄μ μ¬λ λ€λ₯΄λ€.
μ°μ μλ°μ€ν¬λ¦½νΈμ λ°μ΄ν° νμ μ ν¬κ² λ κ°μ§λ‘ λλ λ³΄κ² λ€.
μμνμ μ λ§ κ·Έλλ‘ κ°μ²΄κ° μλκ³ λ©μλλ κ°μ§μ§ μλ ννμ΄λ€.
number, string, boolean, undefined, null, bigint, symbol
μ΄ 7κ°μ§μ νμ μ΄ μμΌλ©° μ΄ κ°λ€μ λͺ¨λ λΆλ³(immutable)νλ€.
νμ§λ§ λ³΄ν΅ λ³μκ° μμλ‘ μ μΈλμ΄ μμ§ μμΌλ©΄ κ°μ λ°κΏ μ μλ€. μμ νμ μ΄ λΆλ³νλ€λ λ§μ λ¬΄μ¨ λ»μΌκΉ?
let a = 3;
a = 5;
λ€μκ³Ό κ°μ λ¬Έμ₯μ΄ μμ λ λ³μ aμ κ°μ 5λ‘ λ³νκ² λλ€.
νμ§λ§ μ΄κ²μ κ° μμ²΄κ° λ³ν κ²μ΄ μλλΌ μλ‘μ΄ λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°κ³ κ·Έ μμ 5λΌλ κ°μ μ μ₯ν ννλ€.
λ μμνμ μ λ©μλλ₯Ό κ°μ§μ§ μλ ννλΌκ³ λ§νλ€.
const str = "Hello";
console.log(str.length);
νμ§λ§ λ€μκ³Ό κ°μ΄ Stringμ κΈ°λ³Έ μμ±μΈ lengthλ₯Ό λΉλ‘―ν λ€μν λ©μλλ₯Ό μ¬μ©ν μ μλ€.
μ΄κ²μ μμ λνΌ κ°μ²΄λΌλ κ² λλ¬ΈμΈλ°, nullκ³Ό undefinedλ₯Ό μ μΈνκ³ λ λͺ¨λ μμ κ°μ²΄λ‘ κ°μΈμ Έ μκΈ° λλ¬Έμ κΈ°λ³Έ λ©μλλ€μ μ¬μ©ν μ μλ€.
μ°Έμ‘° νμ μ λ€μκ³Ό κ°λ€.
const arr = [1,2,3,4];
μλ°μ€ν¬λ¦½νΈμμ λ³μμ λ©λͺ¨λ¦¬λ₯Ό ν λΉν λ λ°μ΄ν° νμ μ λ°λΌ λ©λͺ¨λ¦¬μ λ λΆλΆμΈ μ€νκ³Ό νμ λ€λ₯΄κ² ν λΉλλ€.
μ€νμλ μμνμ λ€μ΄ μ μ₯λκ³ νμλ κ°μ²΄μ²λΌ μ°Έμ‘°νμ μ λ°μ΄ν°κ° μ μ₯λλ€.
κ·Έλ¦¬κ³ μ°Έμ‘° νμ λ°μ΄ν°μ ν¬μΈν°κ° μ€νμμ ν λΉν λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λλ νμμ΄λ€.
μμ μ νμ λμ λ°μ΄ν°λ₯Ό ν λΉνλ 곡κ°μ΄λΌκ³ λ°°μ λλ°, μλ§ λ°°μ΄κ³Ό κ°μ²΄κ°μ μμλ€μ ν¬κΈ°κ° λμ μΌλ‘ λ³νκΈ° λλ¬Έμ νμ ν λΉλλ κ² κ°λ€.
μμνμ μ μ μΈν κ±°μ λͺ¨λ λ°μ΄ν° νμ λ€μ΄ μ°Έμ‘°νμ μ΄λ€. μ¬μ§μ΄ ν¨μλ μ°Έμ‘°νμ μ΄λ€.
function changeNumber(number) {
number += 3;
console.log("print in function: ", number);
}
function changeArr(arr) {
arr.push("World!!");
console.log("print in function: ", arr);
}
let number = 3;
const arr = ["Hello"];
changeNumber(number);
changeArr(arr);
console.log(number);
console.log(arr);
print in function: 6
print in function: [ 'Hello', 'World!!' ]
3
[ 'Hello', 'World!!' ]
λ€μκ³Ό κ°μ΄ ν¨μμ μΈμλ‘ μμ, μ°Έμ‘° νμ μ λ°μ΄ν°λ₯Ό λκΈΈ λλ λμ μ°¨μ΄κ° λνλλ€.
μ°Έμ‘° νμ μ μ°Έμ‘°λ λ©λͺ¨λ¦¬μ ν¬μΈν°κ° μ λ¬λκΈ° λλ¬Έμ μμ μ¬νμ΄ μΈλΆμλ λ°μλμ§λ§, μμ νμ μ κ°μ 볡μ¬λ³Έμ΄ λ겨μ§κΈ° λλ¬Έμ μΈλΆμ λ³νκ° μλ€.
μλ°μ€ν¬λ¦½νΈλ₯Ό 곡λΆνλ€λ³΄λ©΄ νΈμ΄μ€ν μ΄λΌλ λ§μ λ§μ΄ λ³Έλ€. ν¨μλ λ³μμ μ μΈμ μ ν¨λ²μμ μ΅μλ¨μΌλ‘ λμ΄μ¬λ¦¬λ κ²μΈλ°, μ΄λ ν λΉμ μ΄λ£¨μ΄μ§μ§ μλλ€.
var, const, letμ λλ ·ν μ°¨μ΄λ μ€μ½νμμ λνλλ€. varλ ν¨μ μ€μ½ν, constμ letμ λΈλ‘ μ€μ½νμ΄λ€.
κ·Έλ¦¬κ³ varλ λ³μ μ μΈ μ΄μ μ μ¬μ©ν΄λ μλ¬κ° λμ§ μμ§λ§ let, constλ μλ¬λ₯Ό λ°μμν¨λ€. λ§μΉ νΈμ΄μ€ν μ΄ λμ§ μλ κ² κ°λ€.
λν varλ κ°μ μ΄λ¦μΌλ‘ λ³μμ μ¬μ μΈμ΄ κ°λ₯νλ λ± λ€μν λ©΄μμ λμ¨νκ² λκ»΄μ§λλ°, μ΄λ κ² λλ¬Έμ μ§κΈμ μ¬μ©μ΄ κΆμ₯λμ§ μλλ€.
function outer() {
const a = 5;
let b = 3;
function inner() {
console.log(a);
console.log(b);
let b = 5;
const a = 3;
}
inner();
console.log(a);
console.log(b);
}
outer();
μμμ μλ°μ€ν¬λ¦½νΈμ μ μΈλ€μ νΈμ΄μ€ν λλ€κ³ λ§νλ€. νμ§λ§ letκ³Ό constλ λ³΄ν΅ νΈμ΄μ€ν λμ§ μλλ€κ³ μλ €μ Έμλ€.
μ ννκ² λ§νμλ©΄ νΈμ΄μ€ν λμ§ μλ κ²μ²λΌ 보μΈλ€.
ReferenceError: Cannot access 'a' before initialization
μμ κ°μ μ½λλ μλ¬λ₯Ό λ°μμν¨λ€. κ·Έλ¦¬κ³ κ·Έ μλ¬μ λ΄μ©μ λ³μμ μ΄κΈ°νκ° λκΈ° μ μ μ κ·Όν μ μλ€λ λ»μ΄λ€.
νΈμ΄μ€ν λμ§ μλλ€λ©΄ μΈλΆ μ€μ½νμ λ³μμ μ°Έμ‘°ν μ μμ ν λ° μ κ·Έλ΄κΉ?
μ¬κΈ°μ μλ‘μ΄ κ°λ μ΄ λμ¨λ€.
TDZλ let, const, class ννμ λ°μ΄ν° μ μΈ μ μ μ κ·Όνλ κ²μ λ§λ κ°λ μ΄λ€. μμ μ½λμμ inner ν¨μλ₯Ό νΈμΆ μ μλ¬κ° λ°μνλ κ²λ TDZ λλ¬Έμ΄λ€.
class Vehicle {
constructor(type, wheel) {
this.type = type;
this.wheel = wheel;
}
}
class Car extends Vehicle {
constructor(type, wheel, owner) {
super(type, wheel);
this.owner = owner;
}
}
const myCar = new Car("truck", "4", "Am");
console.log(myCar);
λ€μκ³Ό κ°μ μ½λλ μλ¬κ° λμ§ μμ§λ§
class Car extends Vehicle {
constructor(type, wheel, owner) {
this.owner = owner;
super(type, wheel);
}
}
μμ κ°μ΄ super μ΄μ μ thisλ₯Ό μ°Έμ‘°νλ €κ³ νλ©΄ λ νΌλ°μ€ μλ¬λ₯Ό λ°μμν¨λ€.
μ΄λ° νμλ TDZ κ°λ μ΄ μ μ©λκΈ° λλ¬Έμ΄λ€.