var x = 1;
var y = 1;
// var ν€μλλ‘ μ μΈλ λ³μλ κ°μ μ€μ½ν λ΄μμ μ€λ³΅ μ μΈμ νμ©νλ€.
// μ΄κΈ°νλ¬Έμ΄ μλ λ³μ μ μΈλ¬Έμ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ var ν€μλκ° μλ κ²μ²λΌ λμνλ€.
var x = 100;
// μ΄κΈ°νλ¬Έμ΄ μλ λ³μ μ μΈλ¬Έμ 무μλλ€.
var y;
console.log(x); // 100
consoel.log(y); // 1
var ν€μλλ‘ μ μΈν λ³μλ μ€λ‘μ§ ν¨μμ μ½λ λΈλ‘λ§μ μ§μ μ€μ½νλ‘ μΈμ λ°λΌμ, ν¨μ μΈλΆμμ var ν€μλλ‘ μ μΈν λ³μλ μ½λ λΈλ‘ λ΄μμ μ μΈν΄λ λͺ¨λ μ μ λ³μκ° λλ€.
var ν€μλλ‘ λ³μλ₯Ό μ μΈνλ©΄
λ³μ νΈμ΄μ€ν
μ μν΄ λ³μ μ μΈλ¬Έμ΄ μ€μ½νμ΄ μ λλ‘ λμ΄ μ¬λ €μ§ κ² μ²λΌ λμ μ¦,λ³μ νΈμ΄μ€ν
μ μν΄ var ν€μλλ‘ μ μΈν λ³μλ λ³μ μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°ν μ μλ€. λ¨ ν λΉλ¬Έ μ΄μ μ λ³μλ₯Ό μ°Έμ‘°νλ©΄ μΈμ λundefined
λ₯Ό λ°ννλ€.
// μ΄ μμ μλ λ³μ νΈμ΄μ€ν
μ μν΄ μ΄λ―Έ foo λ³μκ° μ μΈλμλ€(1.μ μΈλ¨κ³)
// λ³μ fooλ undefinedλ‘ μ΄κΈ°νλλ€.(2. μ΄κΈ°ν λ¨κ³)
console.log(foo) // undefined
// λ³μμ κ°μ ν λΉ(3. ν λΉ λ¨κ³)
foo = 123;
console.log(foo); // 123
// λ³μ μ μΈμ λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ μ€νλλ€.
var foo;
λ³μ νΈμ΄μ€ν
μ μν΄ μλ¬λ₯Ό λ°μμν€μ§λ μμ§λ§ νλ‘κ·Έλ¨μ νλ¦μ λ§μ§ μμλΏλλ¬ κ°λ
μ±μ λ¨μ΄λ¨λ¦¬κ³ μ€λ₯λ₯Ό λ°μμν¬ μ¬μ§λ₯Ό λ¨κΈ΄λ€.var foo = 123;
// var ν€μλλ‘ μ μΈλ λ³μλ κ°μ μ€μ½νλ΄μμ μ€λ³΅ μ μΈμ νμ©νλ€.
// μλ λ³μ μ μΈλ¬Έμ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ var ν€μλκ° μλ κ²μ²λΌ λμνλ€.
var foo = 456;
let bar = 123;
// let μ΄λ const ν€μλλ‘ μ μΈλ λ³μλ κ°μ μ€μ½ν λ΄μμ μ€λ³΅μ μΈμ νμ©νμ§ μλλ€.
let bar = 456; // SyntaxError: Identifier 'bar' has already been declared
let
ν€μλλ‘ μ μΈν λ³μλ λͺ¨λ μ½λ λΈλ‘(ν¨μ, if λ¬Έ, for λ¬Έ, while λ¬Έ, try/ catch λ¬Έ λ±)μ μ§μ μ€μ½νλ‘ μΈμ νλλΈλ‘ λ 벨 μ€μ½ν
λ₯Ό λ°λ₯Έλ€
let foo = 1; // μ μ λ³μ
{
let foo = 2; // μ§μ λ³μ
let bar = 3; // μ§μ λ³μ
}
console.log(foo); // 1
console.log(bar); // ReferenceError : bar is not defined
var
ν€μλλ‘ μ μΈν λ³μμ λ¬λ¦¬let
ν€μλλ‘ μ μΈν λ³μλλ³μ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλ κ² μ²λΌ λμ
console.log(foo); // ReferenceError: foo is not defined
let foo;
// let ν€μλλ‘ μ μΈν λ³μλ₯Ό λ³μ μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°νλ©΄ μ°Έμ‘° μλ¬ λ°μ.
var
ν€μλλ‘ μ μΈν λ³μλ λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘μ μΈ λ¨κ³
μμ΄κΈ°ν λ¨κ³
κ° νλ²μ μ§ν. μ¦,μ μΈ λ¨κ³
μμ μ€μ½ν(μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½)μ λ³μ μλ³μλ₯Ό λ±λ‘ν΄ μλ°μ€ν¬λ¦½νΈ μμ§μ λ³μμ μ‘΄μ¬λ₯Ό μλ¦°λ€.
// var ν€μλλ‘ μ μΈν λ³μλ λ°νμ μ΄μ μ μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° μ€νλλ€.
// λ€λΌμ λ³μ μ μΈλ¬Έ μ΄μ μ λ³μλ₯Ό μ°Έμ‘°ν μ γ
£γ
λ€.
console.log(foo); // undefined
var foo;
console.log(foo); // undefined
foo = 1; // ν λΉλ¬Έμμ ν λΉ λ¨κ³κ° μ€ν.
console.log(foo) // 1;
let ν€μλλ‘ μ μΈν λ³μλ
μ μΈ λ¨κ³
μμ΄κΈ°ν λ¨κ³
κ° λΆλ¦¬λμ΄ μ§ν. μ¦, λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘μ μΈλ¨κ³
κ° λ¨Όμ μ€νλμ§λ§μ΄κΈ°ν λ¨κ³
λλ³μ μ μΈλ¬Έ
μ λλ¬νμ λ μ€νλλ€.
μ΄κΈ°ν λ¨κ³ μ€νλκΈ° μ΄μ μ λ³μμ μ κ·Όνλ €κ³ νλ©΄ μ°Έμ‘° μλ¬ λ°μ.let
ν€μλλ‘ μ μΈν λ³μλ μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν λ¨κ³ μμ μ§μ (λ³μ μ μΈλ¬Έ)κΉμ§ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€. μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν μμμ§μ κΉμ§ λ³μλ₯Ό μ°Έμ‘°ν μ μλ ꡬκ°μμΌμμ μ¬κ°μ§λ
λΌκ³ λΆλ₯Έλ€.
// λ°νμ μ΄μ μ μ μΈ λ¨κ³κ° μ€νλλ€. μμ§ λ³μκ° μ΄κΈ°ν λμ§ μμλ€.
// μ΄κΈ°ν μ΄μ μ μΌμμ μ¬κ°μ§λμμλ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
console.log(foo); // ReferenceError: foo is not defined
let foo; // λ³μ μ μΈλ¬Έμμ μ΄κΈ°ν λ¨κ³κ° μ€νλλ€.
console.log(foo); // undefined
foo = 1; // ν λΉλ¬Έμμ ν λΉ λ¨κ³κ° μ€ν.
console.log(foo); // 1
let
ν€μλλ‘ μ μΈν λ³μλ λ³μ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλ κ²μ²λΌ 보μΈλ€. νμ§λ§ κ·Έλ μ§ μλ€
let foo = 1; // μ μ λ³μ
{
console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
let foo = 2; // μ§μ λ³μ
}
// let ν€μλλ‘ μ μΈν λ³μμ κ²½μ° λ³μ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλλ€λ©΄
// μ μ λ³μ fooμ κ°μ μΆλ ₯ν΄μΌ νλ€.
// νΈμ΄μ€ν
λ°μ ν΄λΉ μ€μ½νμ μ΅μλ¨μ λμ΄ μ¬λ €μ§ κ² κ°μ νμ λ°μ.
// μ μ λ³μ foo μ°Έμ‘° λΆκ°λ₯.
π‘ νΈμ΄μ€ν μ΄λ?
νΈμ΄μ€ν
μ μ½λλ₯Ό μ€ννκΈ° μ λ³μμ μΈ
/ν¨μμ μΈ
μ ν΄λΉ μ€μ½νμ μ΅μλ¨μΌλ‘ λμ΄μ¬λ¦¬λ κ²μ΄ μλλ€.
νΈμ΄μ€ν
μ μ½λκ° μ€ννκΈ° μ λ³μμ μΈ
/ν¨μμ μΈ
μ΄ ν΄λΉ μ€μ½νμ μ΅μλ¨μΌλ‘ λμ΄ μ¬λ €μ§ κ² κ°μ νμμ λ§νλ€.
var
ν€μλλ‘ μ μΈνμ μ λ³μ
μμ μ ν¨μ
, κ·Έλ¦¬κ³ μ μΈνμ§ μμ λ³μμ κ°μ ν λΉνμ묡μ μ μ
μ μ μ κ°μ²΄ windowμ νλ‘νΌν°κ° λλ€.
let
ν€μλλ‘ μ μΈν μ μ λ³μλ μ μ κ°μ²΄μ νλ‘νΌν°κ° μλλ€.let
μ μ λ³μλ 보μ΄μ§ μλ κ°λ μ μΈ λΈλ‘λ΄μ μ‘΄μ¬νκ² λλ€.
let x = 1;
// let, const ν€μλλ‘ μ μΈν μ μ λ³μλ μ μ κ°μ²΄ windowμ νλ‘νΌν°κ° μλλ€.
console.log(window.x); // undefined
consoel.log(x); // 1
const
ν€μλλ μμ
λ₯Ό μ μΈνκΈ° μν΄ μ¬μ© νμ§λ§, λ°λμ μμ
λ§μ μν΄ μ¬μ©νμ§ μμ.const
ν€μλμ νΉμ§μ let
ν€μλμ λλΆλΆ ν΅μΌ λ€λ₯Έμ μ€μ¬μΌλ‘ μλ μ€λͺ
.
const
ν€μλλ‘ μ μΈν λ³μλ λ°λμ μ μΈκ³Ό λμμ μ΄κΈ°ν ν΄μΌνλ€.
const
ν€μλλ‘ μ μΈν λ³μλlet
ν€μλλ‘ μ μΈν λ³μμ λ§μ°¬κ°μ§λ‘λΈλ‘ λ 벨 μ€μ½ν
λ₯Ό κ°μ§λ©°, λ³μ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μ²λΌ λμ.
{
// λ³μ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλ κ² μ²λΌ λμ
console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
const foo = 1;
console.log(foo); // 1
}
// λΈλ‘ λ 벨 μ€μ½νλ₯Ό κ°λλ€.
console.log(foo); // ReferenceError: foo is not defined
var
λλlet
ν€μλλ‘ μ μΈν λ³μλ μ¬ν λΉμ΄ μμ λ‘μ°λconst
ν€μλλ‘ μ μΈν λ³μλ μ¬ν λΉμ΄ κΈμ§
μμλ μ¬ν λΉμ΄ κΈμ§λ λ³μλ₯Ό λ§νλ€. μμλ μν μ μ§μ κ°λ μ±, μ μ§λ³΄μμ νΈμλ₯Ό μν΄ μ κ·Ήμ μΌλ‘ μ¬μ©ν΄μΌνλ€.
const
ν€μλλ‘ μ μΈλ λ³μμ μμ κ°μ ν λΉν κ²½μ° μμ κ°μ λ³κ²½ν μ μλ κ°μ΄κ³ ,const
ν€μλμ μν΄ μ¬ν λΉμ΄ κΈμ§λλ―λ‘ ν λΉλ κ°μ λ³κ²½ν μ μλ λ°©λ²μ μλ€. μμκ° λ³κ²½ λ°©λ²μ μ¬ν λΉ λ°μ μλ€.
const
ν€μλλ‘ μ μΈλ λ³μμ μμ κ° ν λΉν κ²½μ° κ°μ λ³κ²½ν μ μμ§λ§const
ν€μλλ‘ μ μΈλ λ³μμ κ°μ²΄λ₯Ό ν λΉν κ²½μ° κ°μ λ³κ²½ν μ μλ€.
const
ν€μλλ μ¬ν λΉμ κΈμ§ν λΏ "λΆλ³"μ μλ―Ένμ§ μλλ€.
λ³μ μ μΈμλ κΈ°λ³Έμ μΌλ‘
const
λ₯Ό μ¬μ©νκ³let
μ μ¬ν λΉμ΄ νμν κ²½μ°μ νμ ν΄ μ¬μ©νλ κ²μ΄ μ’λ€.const
ν€μλλ₯Ό μ¬μ©νλ©΄ μλμΉ μμ μ¬ν λΉμ λ°©μ§νκΈ° λλ¬Έμ μ’ λ μμ νλ€.
var
μ let
const
ν€μλλ λ€μκ³Ό κ°μ΄ μ¬μ©
var
ν€μλλ μ¬μ©νμ§ μλλ€.let
ν€μλλ₯Ό μ¬μ© μ΄λ λ³μμ μ€μ½νλ μ΅λν μ’κ²const
ν€μλλ₯Ό μ¬μ©νλ€. const
ν€μλλ μ¬ν λΉμ κΈμ§νλ―λ‘ var
, let
ν€μλ λ³΄λ€ μμ νλ€.