π‘λ³μ μ μΈ λ°©μ
var - λ³μ μ μΈ, ν¨μ μ€μ½ν, 리ν°λ΄ κ°μ μ¬ν λΉμ΄ κ°λ₯, λ³μμ¬μ μΈ κ°λ₯, νΈμ΄μ€ν λ¨
let - λ³μ μ μΈ, λΈλ‘ μ€μ½ν, 리ν°λ΄ κ°μ μ¬ν λΉμ΄ κ°λ₯, λ³μμ¬μ μΈ λΆκ°λ₯
const - μμ μ μΈ, λΈλ‘ μ€μ½ν, 리ν°λ΄ κ°μ μ¬ν λΉμ΄ λΆκ°λ₯, λ³μμ¬μ μΈ λΆκ°λ₯
π‘νΈμ΄μ€ν μ μ°κ΄μ§μ΄ μ€λͺ
varλ μ μΈλ¨κ³μ μ΄κΈ°ν λ¨κ³κ° ν λ²μ μ§νλλ€.
λ³μ νΈμ΄μ€ν μ μν΄ μ μΈλ¬Έ μ΄μ μ μ κ·Όμ΄ κ°λ₯νκ³ λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ undefined κ°μΌλ‘ μ΄κΈ°νλλ€.
letμ μ μΈλ¨κ³μ μ΄κΈ°ν λ¨κ³κ° λΆλ¦¬λμ΄ μ§νλλ€.
μ μΈλ¬Έ μ΄μ μ μ κ·Όνλ©΄ μΌμμ μ¬κ°μ§λ(TDZ)κ° μ‘΄μ¬ν΄ νΈμ΄μ€ν μ λμ§λ§ μ°Έμ‘°μλ¬κ° λ°μν΄ νΈμ΄μ€ν μ΄ λμ§ μλ κ²μ²λΌ λμνλ€.
constλ μ μΈκ³Ό λμμ μ΄κΈ°νλ₯Ό ν΄μΌ νκΈ° λλ¬Έμ μ μΈλ¬Έ μ΄μ μ μ κ·Όνλ©΄ λ¬Έλ²μλ¬κ° λ°μν΄ νΈμ΄μ€ν μ΄ λμ§ μλ κ²μ²λΌ λμνλ€.
π‘λΉκ΅ μ€λͺ
var, letμ λ³μμ μΈ ν€μλ μ΄λ―λ‘ λ¦¬ν°λ΄ κ°μ μ¬ν λΉμ΄ κ°λ₯νμ§λ§, constλ μμλ₯Ό μ μΈνμ¬ λ¦¬ν°λ΄ κ°μ μ¬ν λΉμ΄ λΆκ°λ₯νλ©° μ μΈκ³Ό λμμ 리ν°λ΄ κ°μ ν λΉν΄ μ€μΌ νλ€.
let, const ν€μλλ block-scoped, μ¦ λΈλ‘(μ€κ΄νΈ) λ΄λΆμ let, const ν€μλλ‘ μ μΈλ λ³μλ μΈλΆ μ€μ½νμ μν₯μ μ£Όμ§ μλλ€.
λ³μ μ μΈ λ°©μ
var
- ES5 μ΄μ λΆν° μ¬μ©
- λ³μλ₯Ό μ μΈνλ ν€μλ, 리ν°λ΄ κ°μ μ¬ν λΉμ΄ κ°λ₯
- ν¨μ μ€μ½νλ₯Ό κ°μ§λ€. λ³μλ ν¨μ λ΄μμ μ μΈλλ©΄ ν¨μ λ΄μμ μ ν¨νκ³ , λΈλ‘(scope) λ΄μμ μ μΈλμ΄λ ν¨μ λ΄μμ μ ν¨νλ€.
- λ³μλ₯Ό μ μΈνκΈ° μ μ μ κ·Όν μ μμΌλ©°, μ΄κ²μ΄ νΈμ΄μ€ν (hoisting) κ°λ μ΄λ€.
- κ°μ΄ μ¬ν λΉλ μ μλ€.
let
- ES6μμ λμ
- λ³μλ₯Ό μ μΈνλ ν€μλ, 리ν°λ΄ κ°μ μ¬ν λΉμ΄ κ°λ₯
- λΈλ‘ μ€μ½ν(block scope)λ₯Ό κ°μ§λ€. μ¦ λ³μλ μ μΈλ λΈλ‘ λ΄μμλ§ μ ν¨νλ€.
- λ³μλ₯Ό μ μΈνκΈ° μ μ μ κ·Όν μ μλ€. νΈμ΄μ€ν μ λμ§λ§ μΌμμ μ¬κ°μ§λκ° μ‘΄μ¬νμ¬ μ κ·Όνλ©΄ ReferenceErrorκ° λ°μνλ€.
- κ°μ΄ μ¬ν λΉλ μ μλ€.
const
- ES6μμ λμ
- μμλ₯Ό μ μΈνλ ν€μλ, 리ν°λ΄ κ°μ μ¬ν λΉμ΄ λΆκ°λ₯
- λΈλ‘ μ€μ½νλ₯Ό κ°μ§λ€.
- κ°μ΄ μ¬ν λΉλμ§ μμΌλ―λ‘ λ³μλ₯Ό μ μΈκ³Ό λμμ μ΄κΈ°νν΄μΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ SyntaxErrorκ° λ°μνλ€.
- constλ‘ μ μΈλ κ°μ²΄λ λ°°μ΄μ μμ ν μ μμ§λ§, λ³μ μ체λ₯Ό λ€λ₯Έ κ°μΌλ‘ μ¬ν λΉν μλ μλ€.
π‘π‘π‘
- var, letμ λ³μμ μΈ ν€μλ μ΄λ―λ‘ λ¦¬ν°λ΄ κ°μ μ¬ν λΉμ΄ κ°λ₯νμ§λ§, constλ μμλ₯Ό μ μΈνμ¬ λ¦¬ν°λ΄ κ°μ μ¬ν λΉμ΄ λΆκ°λ₯νλ©° μ μΈκ³Ό λμμ 리ν°λ΄ κ°μ ν λΉν΄ μ€μΌ νλ€.
- let, const ν€μλλ block-scoped, μ¦ λΈλ‘(μ€κ΄νΈ) λ΄λΆμ let, const ν€μλλ‘ μ μΈλ λ³μλ μΈλΆ μ€μ½νμ μν₯μ μ£Όμ§ μλλ€.
var λμ letμ μ¬μ©λΌμΌ νλ μ΄μ ?
var ν€μλλ λ³μλͺ μ μ¬μ μΈν΄λ μλ¬΄λ° λ¬Έμ κ° λ°μνμ§ μλλ€.
λ°λ©΄μ let ν€μλλ λ³μλͺ μ¬μ μΈμ μλ¬λ₯Ό λ°μμν¨λ€.
μ΄μ var ν€μλλ‘ λ³μμ μΈνλ κ²μ κ·Έλ§!
- let ν€μλλ λ³μμ μ¬ μ μΈμ λ§μμ€λ€. (λ³μ μ¬ μ μΈκ³Ό κ° μ¬ ν λΉμ νΌλνμ§ λ§ κ²)
- let ν€μλλ νΈμ΄μ€ν μ λμ§λ§ μΌμμ μ¬κ°μ§λκ° μ‘΄μ¬νμ¬ μ κ·Όνλ©΄ ReferenceErrorκ° λ°μνλ―λ‘, λ³μ μ¬μ© μ λ°λμ λ¨Όμ μ μΈν΄μΌ νλ€.
- let ν€μλλ block-scoped, μ¦ λΈλ‘λ¨μ μμμ κ³ λ¦½λ λ³μλ₯Ό μ μΈν μ μμ΄μ μΈλΆ scopeμ μ€μΌμ λ§μ μ μλ€.
var ν€μλλ‘ μ μΈν λ³μμ λ¬Έμ μ
λ³μ μ€λ³΅ μ μΈ νμ©
var name = 'typescript';
console.log(name); // typescript
var page = 100;
// var ν€μλλ‘ μ μΈλ λ³μλ κ°μ μ€μ½ν λ΄μμ μ€λ³΅ μ μΈμ νμ©νλ€.
// μ΄κΈ°νλ¬Έμ΄ μλ λ³μ μ μΈλ¬Έμ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ var ν€μλκ° μλ κ²μ²λΌ λμνλ€.
var name = 'javascript';
console.log(name); // javascript
// μ΄κΈ°νλ¬Έμ΄ μλ λ³μ μ μΈλ¬Έμ 무μλλ€.
var page;
console.log(page ); // 100
- var ν€μλλ‘ μ μΈν λ³μλ μ€λ³΅ μ μΈμ΄ κ°λ₯νλ€.
- μ€λ³΅ μ μΈνλ©΄ μ΄κΈ°νλ¬Έ(λ³μ μ μΈκ³Ό λμμ μ΄κΈ°νκ°μ ν λΉνλ λ¬Έ) μ 무μ λ°λΌ λ€λ₯΄κ² λμνλ€.
- μ΄κΈ°νλ¬Έμ΄ μλ λ³μ μ μΈλ¬Έμ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ var ν€μλκ° μλ κ²μ²λΌ λμνκ³ μ΄κΈ°νλ¬Έμ΄ μλ λ³μ μ μΈλ¬Έμ 무μλλ€. μ΄λ μλ¬λ λ°μνμ§ μλλ€.
- μ½λλμ΄ λ§μμ§λ€λ©΄ μ΄λμμ μ΄λ»κ² μ¬μ©λ μ§λ νμ νκΈ° νλ€λ€.
- λμΌν μ΄λ¦μ λ³μκ° μ΄λ―Έ μ μΈλμ΄ μλ κ²μ λͺ¨λ₯΄κ³ λ³μλ₯Ό μ€λ³΅ μ μΈνλ©΄μ κ°κΉμ§ ν λΉνλ€λ©΄ μλμΉ μκ² λ¨Όμ μ μΈλ λ³μ κ°μ΄ λ°λ μ°λ €κ° μλ€.
κ·Έλμ ES6 μ΄ν, μ΄λ₯Ό 보μνκΈ° μν΄ μΆκ°λ λ³μ μ μΈ λ°©μμ΄ letκ³Ό constμ΄λ€.
let name = 'typescript';
console.log(name); // typescript
let name = 'javascript';
console.log(name);
// Uncaught SyntaxError: Identifier 'name' has already been declared
- nameμ΄ μ΄λ―Έ μ μΈλμλ€λ μλ¬ λ©μ§κ° λμ¨λ€.
- λ³μ μ¬μ μΈμ΄ λμ§ μλλ€.
letκ³Ό constμ μ°¨μ΄μ μ immutable μ¬λΆμ΄λ€.
let name = 'typescript';
console.log(name); // typescript
let name = 'javascript';
console.log(name);
// Uncaught SyntaxError: Identifier 'name' has already been declared
name = 'react';
console.log(name); //react
- let μ λ³μμ μ¬ν λΉμ΄ κ°λ₯νλ€.
- κ·Έλ μ§λ§, constλ λ³μ μ¬μ μΈ, λ³μ μ¬ν λΉ λͺ¨λ λΆκ°λ₯νλ€.
ν¨μ λ 벨 μ€μ½ν
var x = 1;
if (true) {
// xλ μ μ λ³μλ€. μ΄λ―Έ μ μΈλ μ μ λ³μ Xκ° μμΌλ―λ‘ X λ³μλ μ€λ³΅ μ μΈλλ€.
// μ΄λ μλμΉ μκ² λ³μκ°μ΄ λ³κ²½λλ λΆμμ©μ λ°μμν¨λ€.
var x = 10;
}
console.log(x); // 10
- var ν€μλλ‘ μ μΈν λ³μλ μ€λ‘μ§ ν¨μμ μ½λ λΈλ‘λ§μ μ§μ μ€μ½νλ‘ μΈμ νλ€.
- ν¨μ μΈλΆμμ var ν€μλλ‘ μ μΈν λ³μλ μ½λ λΈλ‘ λ΄μμ μ μΈν΄λ λͺ¨λ μ μ λ³μκ° λλ€.
var i = 10;
// forλ¬Έμμ μ μΈν iλ μ μ λ³μλ€.
// μ΄λ―Έ μ μΈλ μ μ λ³μ iκ° μμΌλ―λ‘ μ€λ³΅ μ μΈλλ€.
for (var i = 0; i < 5; i++) {
console.log(i); // 01234
}
// μλμΉ μκ² i λ³μμ κ°μ΄ λ³κ²½λμλ€.
console,log(i); // 5
- ν¨μ λ 벨 μ€μ½νλ μ μ λ³μλ₯Ό λ¨λ°ν κ°λ₯μ±μ λμΈλ€.
- μλμΉ μκ² μ μ λ³μκ° μ€λ³΅ μ μΈλλ κ²½μ°κ° λ°μνλ€.
λ³μ νΈμ΄μ€ν
// μ΄ μμ μλ λ³μ νΈμ΄μ€ν
μ μν΄ μ΄λ―Έ foo λ³μκ° μ μΈλμλ€(1. μ μΈ λ¨κ³)
// λ³μ fooλ undefinedλ‘ μ΄κΈ°νλλ€(2. μ΄κΈ°ν λ¨κ³)
console.log(foo); // undefined
// λ³μμ κ°μ ν λΉ(3. ν λΉ λ¨κ³)
foo = 123;
console.log(foo); // 123
// λ³μ μ μΈμ λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ μ€νλλ€.
var foo;
- var ν€μλλ‘ λ³μλ₯Ό μ μΈνλ©΄ λ³μ νΈμ΄μ€ν μ μν΄ λ³μ μ μΈλ¬Έμ΄ μ€μ½νμ μ λλ‘ λμ΄μ¬λ €μ§ κ²μ²λΌ λμνλ€.
- λ³μνΈμ΄μ€ν μ μν΄ var ν€μλλ‘ μ μΈν λ³μλ λ³μ μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°ν μ μλ€.
- λ¨, ν λΉλ¬Έ μ΄μ μ λ³μλ₯Ό μ°Έμ‘°νλ©΄ μΈμ λ undefinedλ₯Ό λ°ννλ€.
- λ³μ μ μΈλ¬Έ μ΄μ μ λ³μλ₯Ό μ°Έμ‘°νλ κ²μ λ³μ νΈμ΄μ€ν μ μν΄ μλ¬λ₯Ό λ°μμν€μ§λ μμ§λ§ νλ‘κ·Έλ¨ νλ¦μ λ§μ§ μμλΏλλ¬ κ°λ μ±μ λ¨μ΄λ¨λ¦¬κ³ μ€λ₯λ₯Ό λ°μμν¬ μ¬μ§λ₯Ό λ¨κΈ΄λ€.
let ν€μλ
var ν€μλμ λ¨μ μ 보μνκΈ° μν΄ ES6μμ μλ‘μ΄ λ³μ μ μΈ ν€μλ let, constλ₯Ό λμ
λ³μ μ€λ³΅ μ μΈ κΈμ§
var foo = 123;
// var ν€μλλ‘ μ μΈλ λ³μλ κ°μ μ€μ½ν λ΄μμ μ€λ³΅ μ μΈμ νμ©νλ€.
// μλ λ³μ μ μΈλ¬Έμ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ var ν€μλκ° μλ κ²μ²λΌ λμνλ€.
var foo = 456;
let bar = 123;
// leto const ν€μλλ‘ μ μΈλ λ³μλ κ°μ μ€μ½ν λ΄μμ μ€λ³΅ μ μΈμ νμ©νμ§ μλλ€.
let bar = 456; // SyntaxError: Identifier 'bar' has already been declared
- Let ν€μλλ‘ μ΄λ¦μ΄ κ°μ λ³μλ₯Ό μ€λ³΅ μ μΈνλ©΄ λ¬Έλ² μλ¬ SyntaxErrorκ° λ°μνλ€.
λΈλ‘ λ 벨 μ€μ½ν
- var ν€μλλ‘ μ μΈν λ³μλ μ€λ‘μ§ ν¨μμ μ½λ λΈλ‘λ§μ μ§μ μ€μ½νλ‘ μΈμ νλ ν¨μ λ 벨 μ€μ½νλ₯Ό λ°λ₯Έλ€.
- let ν€μλλ‘ μ μΈν λ³μλ λͺ¨λ μ½λ λΈλ‘(ν¨μ, if λ¬Έ, for λ¬Έ, while λ¬Έ, try/catch λ¬Έ λ±)μ μ§μ μ€μ½νλ‘ μΈμ νλ λΈλ‘ λ 벨 μ€μ½ν block-level scopeλ₯Ό λ°λ₯Έλ€.
let foo = 1; // μ μ λ³μ
{
let foo = 2; // μ§μ λ³μ
let bar = 3; // μ§μ λ³μ
}
console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined
- μ μμ μ μ½λ λΈλ‘ λ΄μμ μ μΈλ foo λ³μμ bar λ³μλ μ§μ λ³μλ€.
- μ μμμ μ μΈλ foo λ³μμ μ½λ λΈλ‘ λ΄μμ μ μΈλ foo λ³μλ λ€λ₯Έ λ³κ°μ λ³μλ€.
- λν bar λ³μλ λΈλ‘ λ 벨 μ€μ½νλ₯Ό κ°λ μ§μ λ³μλ€. λ°λΌμ μ μμμλ bar λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
- ν¨μλ μ½λ λΈλ‘μ΄λ―λ‘ μ€μ½νλ₯Ό λ§λ λ€.
- μ΄λ ν¨μ λ΄μ μ½λ λΈλ‘μ ν¨μ λ 벨 μ€μ½νμ μ€μ²©λλ€.
λ³μ νΈμ΄μ€ν
var ν€μλλ‘ μ μΈν λ³μμ λ¬λ¦¬ let ν€μλλ‘ μ μΈν λ³μλ λ³μ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μ²λΌ λμνλ€.
console.log(foo); // ReferenceError: foo is not defined
let foo;
- let ν€μλλ‘ μ μΈν λ³μλ₯Ό λ³μ μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°νλ©΄ μ°Έμ‘° μλ¬ (ReferenceError)κ° λ°μνλ€.
// var ν€μλλ‘ μ μΈν λ³μλ λ°νμ μ΄μ μ μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° μ€νλλ€.
// λ°λΌμ λ³μ μ μΈλ¬Έ μ΄μ μ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
console.log(foo); // undefined
var foo;
console.log(foo); // undefined
foo = 1; // ν λΉμμ ν λΉ λ¨κ³κ° μ€νλλ€.
console.log(foo); // 1
- var ν€μλλ‘ μ μΈν λ³μλ λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° ν λ²μ μ§νλλ€.
- μ¦, μ μΈ λ¨κ³μμ μ€μ½νμ λ³μ μλ³μλ₯Ό λ±λ‘ν΄ μλ°μ€ν¬λ¦½νΈ μμ§μ λ³μμ μ‘΄μ¬λ₯Ό μλ¦¬κ³ μ¦μ μ΄κΈ°ν λ¨κ³μμ undefinedλ‘ λ³μλ₯Ό μ΄κΈ°ννλ€.
- λ°λΌμ λ³μ μ μΈλ¬Έ μ΄μ μ λ³μμ μ κ·Όν΄λ μ€μ½νμ λ³μκ° μ‘΄μ¬νκΈ° λλ¬Έμ μλ¬κ° λ°μνμ§ μλλ€. λ€λ§ undefinedλ₯Ό λ°ννλ€.
- μ΄ν λ³μ ν λΉλ¬Έμ λλ¬νλ©΄ λΉλ‘μ κ°μ΄ ν λΉλλ€.
// νμ μ΄μ μ μ μΈ λ¨κ³κ° μ€νλλ€. μμ§ λ³μκ° μ΄κΈ°νλμ§ μμλ€.
// μ΄κΈ°ν μ΄μ μ μΌμμ μ¬κ°μ§λμμλ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
console.log(foo); // ReferenceError: foo is not defined
let foo; // λ³μ μ μΈλ¬Έμμ μ΄κΈ°ν λ¨κ³κ° μ€νλλ€.
console.log(foo); // undefined
foo = 1; // ν λΉλ¬Έμμ ν λΉ λ¨κ³κ° μ€νλλ€.
console.log(foo); // 1
let ν€μλλ‘ μ μΈν λ³μλ "μ μΈ λ¨κ³"μ "μ΄κΈ°ν λ¨κ³κ° λΆλ¦¬λμ΄ μ§νλλ€.
- λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ μ μΈ λ¨κ³κ° λ¨Όμ μ€ν
- μ΄κΈ°ν λ¨κ³λ λ³μ μ μΈλ¬Έμ λλ¬νμ λ μ€ν
- λ§μ½ μ΄κΈ°ν λ¨κ³κ° μ€νλκΈ° μ΄μ μ λ³μμ μ κ·Όνλ €κ³ νλ©΄ μ°Έμ‘° μλ¬ ReferenceErrorκ° λ°μ
- let ν€μλλ‘ μ μΈν λ³μλ μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν λ¨κ³ μμ μ§μ (λ³μ μ μΈλ¬Έ)κΉμ§ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
- μΌμμ μ¬κ°μ§λ : μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν μμ μ§μ κΉμ§ λ³μλ₯Ό μ°Έμ‘°ν μ μλ ꡬκ°
μ μ κ°μ²΄μ let
// μ΄ μμ λ λΈλΌμ°μ νκ²½μμ μ€νν΄μΌ νλ€.
// μ μ λ³μ
var x = 1;
// μ묡μ μ μ
y = 2;
// μ μ ν¨μ
function foo() {}
// var ν€μλλ‘ μ μΈν μ μ λ³μλ μ μ κ°μ²΄ windowμ νλ‘νΌν°λ€.
console.log(window.x); // 1
// μ μ κ°μ²΄ windowμ νλ‘νΌν°λ μ μ λ³μμ²λΌ μ¬μ©ν μ μλ€.
console.log(x); // 1
// μ묡μ μ μμ μ μ κ°μ²΄ windowμ νλ‘νΌν°λ€.
console.log(window.y); // 2
console.log(y); // 2
// ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν μ μ ν¨μλ μ μ κ°μ²΄ windowμ νλ‘νΌν°λ€.
console.log(window.foo); // f foo() {}
// μ μ κ°μ²΄ windowμ νλ‘νΌν°λ μ μ λ³μμ²λΌ μ¬μ©ν μ μλ€.
console.log(foo); // f foo() {}
- var ν€μλλ‘ μ μΈν μ μ λ³μμ μ μ ν¨μ κ·Έλ¦¬κ³ μ μΈνμ§ μμ λ³μμ κ°μ ν λΉν μ묡μ μ μμ μ μ κ°μ²΄ windowμ νλ‘νΌν°κ° λλ€.
- μ μ κ°μ²΄μ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν λ windowλ₯Ό μλ΅ν μ μλ€.
// μ΄ μμ λ λΈλΌμ°μ νκ²½μμ μ€νν΄μΌ νλ€.
let x = 1;
// let, const ν€μλλ‘ μ μΈν μ μ λ³μλ μ μ κ°μ²΄ windowμ νλ‘νΌν°κ° μλλ€.
console.log(window.x); // undefined
console.log(x); // 1
- let ν€μλλ‘ μ μΈν μ μ λ³μλ μ μ κ°μ²΄μ νλ‘νΌν°κ° μλλ€.
- μ¦, window. fooμ κ°μ΄ μ κ·Όν μ μλ€.
- let μ μ λ³μλ 보μ΄μ§ μλ κ°λ μ μΈ λΈλ‘ λ΄μ μ‘΄μ¬νκ² λλ€.
const ν€μλ
const ν€μλλ μμλ₯Ό μ μΈνκΈ° μν΄ μ¬μ©νλ€. νμ§λ§ λ°λμ μμλ§μ μν΄ μ¬μ©νμ§λ μλλ€. (κ°μ²΄λ λ³κ²½μ΄ κ°λ₯νκΈ° λλ¬Έ)
μ μΈκ³Ό μ΄κΈ°ν
const foo = 1;
const zoo; // SyntaxError: Missing initializer in const declaration
- const ν€μλλ‘ μ μΈν λ³μλ λ°λμ μ μΈκ³Ό λμμ μ΄κΈ°νν΄μΌ νλ€.
- κ·Έλ μ§ μμΌλ©΄ λ€μκ³Ό κ°μ΄ λ¬Έλ² μλ¬κ° λ°μνλ€.
{
// λ³μ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλ κ²μ²λΌ λμνλ€.
console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
const foo = 1;
console.log(foo); // 1
}
// λΈλ‘ λ 벨 μ€μ½νλ₯Ό κ°λλ€.
console.log(foo); // ReferenceError: foo is not defined
- const ν€μλλ‘ μ μΈν λ³μλ let ν€μλλ‘ μ μΈν λ³μμ λ§μ°¬κ°μ§λ‘ λΈλ‘ λ 벨 μ€μ½νλ₯Ό κ°μ§λ€.
- λ³μ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μ²λΌ λμνλ€.
μ¬ν λΉ κΈμ§
const foo = 1;
foo = 2; // TypeError: Assignment to constant variable.
var λλ let ν€μλλ‘ μ μΈν λ³μλ μ¬ν λΉμ΄ μμ λ‘μ°λ const ν€μλλ‘ μ μΈν λ³μλ μ¬ν λΉμ΄ κΈμ§λλ€.
μμ
// μΈμ κ°κ²©
let preTaxPrice = 100;
// μΈν κ°κ²©
// 0.1μ μλ―Έλ₯Ό λͺ
νν μκΈ° μ΄λ ΅κΈ° λλ¬Έμ κ°λ
μ±μ΄ μ’μ§ μλ€.
let afterTaxPrice = pretaxPrice + (preTaxPrice * 0.1);
console.log(afterTaxPrice); // 110
- const ν€μλλ‘ μ μΈν λ³μμ μμ κ°μ ν λΉν κ²½μ° λ³μ κ°μ λ³κ²½ν μ μλ€.
- λ³μμ μλ κ°λ μΈ μμλ μ¬ν λΉμ΄ κΈμ§λ λ³μλ₯Ό λ§νλ€.
- μμλ κ°μ μ μ₯νκΈ° μν λ©λͺ¨λ¦¬ 곡κ°μ΄ νμνλ―λ‘ λ³μλΌκ³ ν μ μλ€. λ¨, λ³μλ μΈμ λ μ§ μ¬ν λΉμ ν΅ν΄ λ³μ κ°μ λ³κ²½ν μ μμ§λ§ μμλ μ¬ν λΉ μ΄ κΈμ§λλ€.
- μμλ μν μ μ§μ κ°λ μ±, μ μ§λ³΄μμ νΈμλ₯Ό μν΄ μ κ·Ήμ μΌλ‘ μ¬μ©ν΄μΌ νλ€.
// μΈμ¨μ μλ―Ένλ 0.1μ λ³κ²½ν μ μλ μμλ‘μ μ¬μ©λ κ°μ΄λ€.
// λ³μ μ΄λ¦μ λλ¬Έμλ‘ μ μΈν΄ μμμμ λͺ
νν λνλΈλ€.
const TAX_RATE = 0.1;
// μΈμ κ°κ²©
let preTaxPrice = 100;
// μΈν κ°κ²©
let afterTaxPrice = preTaxPrice + (preTaxPrice * TAX_RATE);
console.log(afterTaxPrice); // 110
- μΌλ°μ μΌλ‘ μμμ μ΄λ¦μ λλ¬Έμλ‘ μ μΈν΄ μμμμ λͺ νν λνλΈλ€.
- μ¬λ¬ λ¨μ΄λ‘ μ΄λ€μ§ κ²½μ°μλ μΈλμ€μ½μ΄λ‘ ꡬλΆν΄μ μ€λ€μ΄ν¬ μΌμ΄μ€λ‘ νννλ κ²μ΄ μΌλ°μ μ΄λ€.
const ν€μλμ κ°μ²΄
const person = {
name: 'Lee'
};
// κ°μ²΄λ λ³κ²½ κ°λ₯ν κ°μ΄λ€. λ°λΌμ μ¬ν λΉ μμ΄ λ³κ²½μ΄ κ°λ₯νλ€.
person.name = 'Kim';
console.log(person); // {name: "Kim"}
- const ν€μλλ‘ μ μΈλ λ³μμ μμ κ°μ ν λΉν κ²½μ° κ°μ λ³κ²½ν μ μλ€.
- νμ§λ§ const ν€μλλ‘ μ μΈλ λ³μμ κ°μ²΄λ₯Ό ν λΉν κ²½μ° κ°μ λ³κ²½ν μ μλ€.
- λ³κ²½ λΆκ°λ₯ν κ°μΈ μμ κ°μ μ¬ν λΉ μμ΄ λ³κ²½(κ΅μ²΄)ν μ μλ λ°©λ²μ΄ μμ§λ§ λ³κ²½ κ°λ₯ν κ°μΈ κ°μ²΄λ μ¬ν λΉ μμ΄λ μ§μ λ³κ²½μ΄ κ°λ₯νκΈ° λλ¬Έμ΄λ€.
- const ν€μλλ μ¬ν λΉμ κΈμ§ν λΏ "λΆλ³"μ μλ―Ένμ§ λ μλλ€.
- λ€μ λ§ν΄, μλ‘μ΄ κ°μ μ¬ν λΉνλ κ²μ λΆκ°λ₯νμ§λ§ νλ‘νΌν° λμ μμ±, μμ , νλ‘νΌν° κ°μ λ³κ²½μ ν΅ν΄ κ°μ²΄λ₯Ό λ³κ²½νλ κ²μ κ°λ₯νλ€.
- κ°μ²΄κ° λ³κ²½λλλΌλ λ³μμ ν λΉλ μ°Έμ‘° κ°μ λ³κ²½λμ§ μλλ€.
λ³μ λ²μ
Global Scope (μ μ μ€μ½ν)
μ μμ μ μΈλμ΄ μ΄λ κ³³μμλ μ κ·Ό κ°λ₯
Local Scope (μ§μ μ€μ½ν)
- Block Scope : μ€κ΄νΈ {} μμλ§ μ ν¨
- Function Scope : ν¨μ λ΄μμλ§ μ ν¨
π‘π‘π‘
scopeλ₯Ό μ€λͺ νμλ©΄, μ΄λ€ μ μΈλ λ³μκ° μλ€λ©΄ μ΄ λ³μκ° μ ν¨ν 곡κ°μ λ²μλ₯Ό λ§νλ€.
μλ°μ€ν¬λ¦½νΈμμλ ν¬κ² μ μμ€μ½νμ ν¨μμ€μ½νκ° μ‘΄μ¬νμκ³ , ECMA6λΆν° λΈλ‘μ€μ½ν(μ€κ΄νΈ μ€μ½ν)λ₯Ό μ§μνλ€.
- varλ ν¨μ λ 벨 μ€μ½ν μ§μ
- let, constλ λΈλ‘ λ 벨 μ€μ½νλ₯Ό μ§μ
'Frontend > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μμ κ°κ³Ό κ°μ²΄μ λΉκ΅ (0) | 2024.03.14 |
---|---|
μ μ¬ λ°°μ΄ κ°μ²΄, μ΄ν°λ¬λΈ, λνΌ κ°μ²΄ (0) | 2024.03.13 |
ν¨μ μ μ (ν¨μ μ μΈλ¬Έ, ν¨μ ννμ) (0) | 2024.03.07 |
ν¨μ νΈμ΄μ€ν (0) | 2024.03.06 |
νΈμ΄μ€ν (hoisting) (0) | 2024.03.05 |