[Js λ₯λ€μ΄λΈ] 15. let, const
π var ν€μλμ λ¨μ
1. λ³μμ μ€λ³΅ μ μΈ νμ©
var x = 10;
console.log(x);
var x = 20;
console.log(x);
μ΄λ―Έ μ μΈλκ³ μ΄κΈ°νκΉμ§ μλ£λ λ³μ x μ μ€λ³΅μ μΈμ νμ©νλ€.
μ μλ³μκ° μλμΉμκ² κ°μ΄ λ³κ²½λλ©΄ μλ¬λ₯Ό λ°μμν¬ κ°λ₯μ±μ΄ λ§€μ° λλ€.
2. ν¨μ λ 벨 μ€μ½ν
var x = 1;
if(true){
var x = 10;
}
console.log(x);
ν¨μ λ 벨 μ€μ½νμμ μ μΈν λ³μκ° μλλ©΄, μ€μ½νλ₯Ό μμ±νμ§ μκ³ μ μλ³μλ‘ μ·¨κΈνλ€.
μ΄ λ¬Έμ μμ μλμΉ μκ² λ³μ κ°μ λ³κ²½μν¨λ€.
3. νΈμ΄μ€ν
console.log(x);
var x = 1;
λ°νμ μ΄μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄μ μ μΈλ¬Έμ΄ μ μΌ μ λλ‘ λμ΄ μ¬λ €μ§κ³ undefined λ‘ μ΄κΈ°νλλ€.
μ½λκ° μ€νλκΈ°μ μ μ΄λ―Έ μ μΈκ³Ό μ΄κΈ°ν λ¨κ³λ₯Ό λ§μΉ κ²μ΄ λλ€.
μλ¬λ₯Ό λ°μμν€μ§λ μμ§λ§ μ΄λ κ² λ³μλ₯Ό μ¬μ©νλ κ²μ μλͺ»λ λ°©λ²μ΄λ€.
π‘ var ν€μλλ λΈλΌμ°μ μ μ μ κ°μ²΄ window μ νλ‘νΌν°κ° λλ€.
var a = 10;
console.log(window.a);
var ν€μλλ‘ μ μΈν λ³μλ μ΄λ κ² μ κ·Όν μ λ μλ€.
let, const ν€μλλ‘ μ μΈν λ³μλ μ μκ°μ²΄μ νλ‘νΌν°κ° μλλ€.
μμ 3λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ let, const ν€μλλ₯Ό μμ보μ!
2κ°μ ν€μλλ λΉμ·νμ§λ§ μ½κ° λ€λ₯΄λ€.
1οΈβ£ let
1. λ³μμ μ€λ³΅ μ μΈ νμ© x
let ν€μλλ κ°μ μ€μ½νμμ λ³μμ μ€λ³΅ μ μΈμ νμ©νμ§ μλλ€.
μ μλ³μμ μλμΉ μμ λ³κ²½μ λ§μ μ μλ€.
let x = 10;
console.log(x);
let x = 5;
console.log(x); // Uncaught SyntaxError: Identifier 'x' has already been declared
2. λΈλ‘ λ 벨 μ€μ½ν
let ν€μλλ λΈλ‘ λ 벨 μ€μ½νλ‘μ¨, λΈλ‘μ νλμ μ€μ½νλ‘ μΈμ ν΄μ€λ€
let x = 10;
if (true){
let x = 5;
console.log(x); // 5
}
console.log(x); // 10
var ν€μλμ ν¨μ λ 벨 μ€μ½νμ κ²½μ° μ²λΌ, λ³μμ μ΄λ¦μ΄ κ°μλ μ μΈ μμ μ μ€μ½νκ° λ€λ₯΄λ€λ©΄ λ€λ₯Έ λ³μλ‘ μ·¨κΈνκ³ κ°κ° λ€λ₯Έ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μλ³νλ€.
let x = 10;
function go(){
let x = 20;
for(let x = 1; x <= 5; x ++){
console.log(x); // 1 2 3 4 5
}
console.log(x); // 20
}
console.log(x); // 10
ν¨μ λ΄λΆμμλ μ€μ²©λ νλμ μ€μ½νλ₯Ό μμ±νλ€.
3. νΈμ΄μ€ν
π§ let ν€μλλ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ² μ²λΌ λμνλ€?!
var ν€μλλ‘ μ μΈν λ³μκ° νΈμ΄μ€ν μΌλ‘ μΈν΄ undefined κ°μ μ κ·Όν μ μμλ μ΄μ λ λ°νμ μ΄μ μ
"μ μΈ λ¨κ³" μ "μ΄κΈ°ν(undefined) λ¨κ³" λ₯Ό λͺ¨λ κ±°μΉκΈ° λλ¬Έμ΄λ€.
νμ§λ§, let ν€μλλ₯Ό ν΅ν΄ μ μΈν λ³μλ μ μΈ, μ΄κΈ°ν λ¨κ³κ° λΆλ¦¬λμ΄ μ€ν λλ€.
λ°νμ μ΄μ μλ μ μΈ λ¨κ³λ§ κ±°μΉκ³ , μ€ν μ΄ν μ½λ μμμ κ°μ ν λΉν΄μ£Όλ λ³μ μ μΈλ¬Έμ λ§λμΌμ§ λ³μκ° μ΄κΈ°ν λλ€.
λ°λΌμ μ΄ μμ μ¬μ΄μμλ λ³μμ μ κ·Όν μ μκ² λλ€. μ΄ μμ μ μΌμμ μ¬κ°μ§λ λΌκ³ νλ€
κ·Έλ λ€λ©΄ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μΈκ°?
μλλ€. νΈμ΄μ€ν μ μ¬μ ν λ°μνλ€.
μ€μ½νμμ νΈμ΄μ€ν μ μ€μ½ν λ¨μλ‘ λ°μνλ€κ³ νμλ€.
let x = 10;
if(true){
console.log(x); // Uncaught ReferenceError: Cannot access 'x' before initialization
let x = 5;
console.log(x); // 5
}
let ν€μλλ λΈλ‘ λ 벨 μ€μ½ν μ΄λ―λ‘, νΈμ΄μ€ν λ λΈλ‘ λ 벨μμ λ°μνλ€.
μμ μ½λμμ μ μλ³μ 10μ μΆλ ₯ ν΄μΌνλκ±° μλκ°? μ΄λ κ² μκ°ν μ μμ§λ§ νΈμ΄μ€ν μΌλ‘ μΈν΄μ λΈλ‘ λ΄μμ μΌμμ μ¬κ° μ§λκ° μμ±λλ―λ‘ x μ μ κ·Όν μ μκ²λλ€.
2οΈβ£ const
μλμ 2κ°μ§λ₯Ό μ μΈνκ³ let ν€μλμ κ°μ νΉμ§μ κ°μ§λ€.
1. const ν€μλλ‘ μ μΈν λ³μλ μ μΈν λ 무쑰건 μ μΈκ³Ό μ΄κΈ°νλ₯Ό λμμ ν΄μ€μΌ νλ€.
var x ;
x = 10;
console.log(x); // 10
let y ;
y = 20;
console.log(y); // 20
const z;
z = 30;
console.log(z); // Uncaught SyntaxError: Missing initializer in const declaration
2. μμ κ°μ μλ³νλ λ³μμ μ¬ν λΉμ΄ λΆκ°λ₯ νλ€.
const z = 30;
console.log(z); // 30
z = 10;
console.log(z); // Uncaught TypeError: Assignment to constant variable.
const user = {
userId : 'woong';
}
console.log(user.userId); // woong
user.userId = 'choi';
console.log(user.userId); // choi
μμ κ°μ μλ³νλ λ³μ κ°μ λ³κ²½νλ μ μΌν λ°©λ²μ μ¬ν λΉ μ΄λΌκ³ νμλ€
νμ§λ§ const ν€μλλ‘ μ μΈν λ³μλ μ¬ν λΉμ΄ κΈμ§ λλ€.
π§ μμ, κ°μ²΄ κ° λͺ¨λ const ν€μλλ‘ μλ³νλ©΄ λ³κ²½ν μ μλκ°?
κ°μ²΄λ "λ³κ²½ κ°λ₯ν κ°" μ΄λ€.
λ°λΌμ, const ν€μλλ‘ μλ³ν΄λ λ³κ²½μ΄ κ°λ₯νκΈ° λλ¬Έμ κ°μ²΄ 리ν°λ΄λ‘ μμ±ν κ°μ²΄μ νλ‘νΌν°λ₯Ό λμ μΌλ‘ κ΄λ¦¬ν μ μλ€.
μ¬ν λΉ κΈμ§μ λΆλ³μ κ°μ μλ―Έλ‘ λ°μλ€μ΄μ§ λ§μ.
μμ κ°μ κΈ°λ³Έμ μΌλ‘ "λ³κ²½ λΆκ°λ₯ν κ°" μ΄λΌμ λ³μ κ°μ λ³κ²½νλ μ μΌν λ°©λ²μ΄ μ¬ν λΉμΈλ°, const ν€μλλ μ΄κ²μ κΈμ§ νλ€.
λ°λΌμ λ³μ κ° λ³κ²½μ΄ νμ©λμ§ μλ κ²μ΄λ€.