νΈμ΄μ€ν
π© νΈμ΄μ€ν
μ μΈλ¬Έμ΄ μ½λμ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμνλ νΉμ§μ νΈμ΄μ€ν μ΄λΌ ν©λλ€.
π© var νΈμ΄μ€ν
console.log(score); // λ³μ μ°Έμ‘°, undefined
var score = 7; // λ³μ μ μΈλ¬Έ
μλ°μ€ν¬λ¦½νΈ μ½λλ μΈν°ν리ν°μ μν΄ ν μ€μ© μμ°¨μ μΌλ‘ μ€νλλ―λ‘, scoreκ° μ°Έμ‘°λλ μμ μλ μμ§ score λ³μ μ μΈμ΄ μ€νλμ§ μμ μ°Έμ‘° μλ¬κ° μμλ©λλ€. νμ§λ§ μ°Έμ‘° μλ¬κ° λ°μνμ§ μκ³ undefinedκ° μΆλ ₯λ©λλ€.
varλ μ μΈκ³Ό μ΄κΈ°νκ° λμμ μ§νλκΈ°μ undefinedλ‘ μ΄κΈ°νκ° μνλλ€.
κ·Έ μ΄μ λ λ³μ μ μΈμ΄ μμ€μ½λκ° ν μ€μ© μμ°¨μ μΌλ‘ μ€νλλ μμ , μ¦ λ°νμμ΄ μλλΌ κ·Έ μ΄μ λ¨κ³μμ λͺ¨λ μ μΈλ¬Έμ μμ€μ½λμμ μ°Ύμλ΄ λ¨Όμ μ€ννκΈ° λλ¬Έμ λλ€.
μμ€μ½λμ νκ°μ μ€ν
λͺ¨λ μμ€μ½λλ μ€νμ μμ νκ° κ³Όμ μ κ±°μΉλ©° μ½λλ₯Ό μ€ννκΈ° μν μ€λΉλ₯Ό νλ€. μ¦ 'μμ€μ½λμ νκ°'μ 'μμ€μ½λμ μ€ν' κ³Όμ μΌλ‘ λλμ΄ μ²λ¦¬νλ€.
μμ€μ½λ νκ°: μ€ν 컨ν μ€νΈλ₯Ό μμ±νκ³ , λͺ¨λ μ μΈλ¬Έλ§ λ¨Όμ μ€ννμ¬ μμ±λ λ³μλ ν¨μ μλ³μλ₯Ό ν€λ‘ μ€ν 컨ν μ€νΈκ° κ΄λ¦¬νλ μ€μ½ν(λ μ컬 νκ²½μ νκ²½ λ μ½λ)μ λ±λ‘νλ€.
μμ€μ½λ μ€ν: νκ° κ³Όμ μ΄ λλλ©΄ μ μΈλ¬Έμ μ μΈν μμ€μ½λκ° μμ°¨μ μΌλ‘ μ€νλκΈ° μμνλ€.
* μ€ν컨ν μ€νΈ: μλ³μλ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ μ€μ½νμ μ½λ μ€ν μμ κ΄λ¦¬λ₯Ό ꡬνν λ΄λΆ λ©μ»€λμ¦μΌλ‘, λͺ¨λ μ½λλ μ€ν 컨ν μ€νΈλ₯Ό ν΅ν΄ μ€νλκ³ κ΄λ¦¬λλ€.
* λ μ컬 νκ²½: μλ³μμ μλ³μμ λ°μΈλ©λ κ°, κ·Έλ¦¬κ³ μμ μ€μ½νμ λν μ°Έμ‘°λ₯Ό κΈ°λ‘νλ μλ£κ΅¬μ‘°λ‘ μ€ν 컨ν μ€νΈλ₯Ό ꡬμ±νλ μ»΄ν¬λνΈ. (μ½λκ° μ΄λμ μ€νλλ©° μ£Όλ³μ μ΄λ€ μ½λκ° μλμ§)
μμ€μ½λ νκ° κ³Όμ μμ λ³μ μ μΈλ§ μ€ν 컨ν μ€νΈκ° κ΄λ¦¬νλ μ€μ½νμ λ±λ‘λμ΄ undefinedκ° μΆλ ₯λμκ³ ,
κ°μ ν λΉ(score = 7)μ μμ€μ½λ μ€ν κ³Όμ μμ μ€νλ©λλ€.
console.log(score); // undefined
var score = 7; // λ³μ μ μΈ(var score)κ³Ό, κ°μ ν λΉ(score = 7)
console.log(score); // 7
μ¦, λ³μ μ μΈκ³Ό κ°μ ν λΉμ μ€ν μμ μ΄ λ€λ₯΄λ€λ κ²μ λλ€.
μ΄ μ΄μ λ‘ ν¨μ ννμκ³Ό ν΄λμ€ ννμμ νΈμ΄μ€ν λμ§ μμ΅λλ€.
ν¨μ μ μΈλ¬Έ, ν΄λμ€ μ μΈλ¬Έμ νΈμ΄μ€ν λ©λλ€.
a(); // ν¨μ μ μΈλ¬Έ νΈμ΄μ€ν
function a() {
console.log('ν¨μ μ μΈλ¬Έ νΈμ΄μ€ν
')
}
// ν¨μ ννμ
// Uncaught TypeError: calc is not a function
console.log(calc(10, 10));
var calc = function (a, b) {
return a * b;
};
// ν΄λμ€ ννμ
// Uncaught ReferenceError: Message is not defined
var msg = new Message('hello world');
console.log(msg);
class Message {
constructor(message) {
this.message = message;
}
}
π© let, const νΈμ΄μ€ν
μλ°μ€ν¬λ¦½νΈ ES6μμ λμ λ let, constλ₯Ό ν¬ν¨ν΄μ λͺ¨λ μ μΈ(var, let, const, function, function*, class)μ νΈμ΄μ€ν ν©λλ€. λ¨, ES6μμ λμ λ let, const, classλ₯Ό μ¬μ©ν μ μΈλ¬Έμ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μ²λΌ λμν©λλ€.
var ν€μλλ μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° νλ²μ μ§νλμ΄ μ°Έμ‘°μλ¬κ° λ°μνμ§ μλλ°,
let, const ν€μλλ₯Ό μ μΈν λ³μλ μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° λΆλ¦¬λμ΄ μ§νλ©λλ€.
κ·Έλμ μ΄κΈ°ν λ¨κ³κ° μ€νλκΈ° μ μ λ³μμ μ κ·Όνλ €λ©΄ μ°Έμ‘° μλ¬κ° λ°μν©λλ€. μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν μμ μ§μ κΉμ§ λ³μλ₯Ό μ°Έμ‘°ν μ μλ ꡬκ°μ μΌμμ μ¬κ°μ§λ(Temporal Dead Zone, TDZ)λΌκ³ λΆλ¦ λλ€.
// λ°νμ μ΄μ μ μ μΈ λ¨κ³κ° μ€ν, μμ§ λ³μ μ΄κΈ°νκ° λμ§ μμμ΅λλ€.
// μΌμμ μ¬κ°μ§λμμλ λ³μλ₯Ό μ°Έμ‘°ν μ μμ΅λλ€.
console.log(foo); // ReferenceError: foo is not defined
let foo; // λ³μ μ μΈλ¬Έμμ μ΄κΈ°ν λ¨κ³κ° μ€νλ©λλ€.
console.log(foo); // undefined
foo = 1; // ν λΉλ¬Έμμ ν λΉ λ¨κ³κ° μ€νλ©λλ€.
console.log(foo); // 1
let ν€μλλ‘ μ μΈν λ³μκ° νΈμ΄μ€ν μ΄ λ°μνμ§ μλλ€λ©΄ μλ μ½λλ μ μ λ³μ fooμ κ°μ μΆλ ₯ν΄μΌ ν©λλ€.
νμ§λ§ let ν€μλλ‘ μ μΈν λ³μλ μ¬μ ν νΈμ΄μ€ν μ΄ λ°μνκΈ° λλ¬Έμ μ°Έμ‘° μλ¬κ° λ°μν©λλ€.
let foo = 1; // μ μ λ³μ
{
console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
let foo = 2; // μ§μ λ³μ
}
π© μ°Έκ³
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive 4μ₯
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive 23μ₯
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive 15μ₯