λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Front-end/JS

λ³€μˆ˜, ν•¨μˆ˜, 클래슀 ν˜Έμ΄μŠ€νŒ… 정리

by ciocio 2021. 10. 5.

πŸ“Œ  μ„ μ–Έν•˜λŠ” λͺ¨λ“  μ‹λ³„μžλŠ” ν˜Έμ΄μŠ€νŒ… λœλ‹€

 

λ³€μˆ˜ μ„ μ–Έλ¬Έ (var, let, const), ν•¨μˆ˜ μ„ μ–Έλ¬Έ (function, function*), 클래슀 μ„ μ–Έλ¬Έ (class) 은 λͺ¨λ‘ ν˜Έμ΄μŠ€νŒ…μ΄ μΌμ–΄λ‚œλ‹€.

 

 

πŸ“  λ³€μˆ˜

 

βœ”  var 

 

// var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” [1.μ„ μ–Έ 단계] & [2.μ΄ˆκΈ°ν™” 단계]κ°€ λ™μ‹œμ— μ‹€ν–‰λœλ‹€.
// λ”°λΌμ„œ λ³€μˆ˜ μ„ μ–Έλ¬Έ 이전에 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆλ‹€.

console.log(VAR);  // undefined

var VAR;

console.log(VAR);  // undefined

// ν• λ‹Ήλ¬Έμ—μ„œ [3.ν• λ‹Ή 단계]κ°€ μ‹€ν–‰λœλ‹€.

VAR = "var";

console.log(VAR);  // "var"

 

var μ„ μ–Έ & μ΄ˆκΈ°ν™”
var μ„ μ–Έ & μ΄ˆκΈ°ν™”
var μ„ μ–Έ & μ΄ˆκΈ°ν™” & ν• λ‹Ή

 

 

βœ”  const 

 

❗ const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μƒμˆ˜λŠ” λ°˜λ“œμ‹œ μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™” ν•΄μ•Όν•œλ‹€.❗
( const λŠ” let κ³Ό λ‹€λ₯΄κ²Œ, μ„ μ–Έλ¬Έμ—μ„œ [ 2. μ΄ˆκΈ°ν™” 단계 ] 만 싀행될 수 μ—†λ‹€. )


why? let은 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” ν‚€μ›Œλ“œμ§€λ§Œ, constλŠ” μƒμˆ˜(μ›μ‹œκ°’ ν•œμ •)λ₯Ό μ„ μ–Έν•˜λŠ” ν‚€μ›Œλ“œμ΄κΈ°λ•Œλ¬Έμ—
μ²˜μŒλΆ€ν„° 값을 μ§€μ •ν•΄μ€˜μ•Ό 였λ₯˜κ°€ 생기지 μ•ŠλŠ”λ‹€. -> constλŠ” (μ›μ‹œκ°’ ν•œμ •) μž¬ν• λ‹Ή λΆˆκ°€/κΈˆμ§€ ⭐

 

πŸ“  const ν‚€μ›Œλ“œλŠ” μž¬ν• λ‹Ήμ„ κΈˆμ§€ν•  뿐, "λΆˆλ³€"을 μ˜λ―Έν•˜μ§„ μ•ŠλŠ”λ‹€.

μƒˆλ‘œμš΄ μ›μ‹œκ°’μ„ μž¬ν• λ‹Ήν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜μ§€λ§Œ ν”„λ‘œνΌν‹° 동적 생성, μ‚­μ œ, κ°’ 변경을 톡해 객체λ₯Ό λ³€κ²½ν•˜λŠ” 것은 κ°€λŠ₯ν•˜λ‹€.

객체의 ν”„λ‘œνΌν‹°κ°€ λ³€κ²½λ˜λ”λΌλ„ λ³€μˆ˜μ— ν• λ‹Ήλœ 참쑰값은 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

 

let μž¬ν• λ‹Ή
const μ›μ‹œκ°’ μž¬ν• λ‹Ή
const μ°Έμ‘°κ°’ μž¬ν• λ‹Ή

 

// const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μƒμˆ˜λŠ” λŸ°νƒ€μž„ 이전에 [1.μ„ μ–Έ 단계]κ°€ μ‹€ν–‰λœλ‹€.
// ❗아직 [2.μ΄ˆκΈ°ν™” 단계]λŠ” κ±°μΉ˜μ§€ μ•Šμ•˜λ‹€β—
// ❗[2.μ΄ˆκΈ°ν™” 단계] μ΄μ „μ˜ μΌμ‹œμ  μ‚¬κ°μ§€λŒ€(Temporal Dead Zone)μ—μ„œλŠ” μƒμˆ˜λ₯Ό μ°Έμ‘°ν•  수 μ—†λ‹€.❗

console.log(CONST);  // SyntaxError: Missing initializer in const declaration

const CONST;

console.log(CONST);  // SyntaxError: Missing initializer in const declaration

CONST = "const";

console.log(CONST);  // "const"

 

const μ„ μ–Έ
const μ„ μ–Έ
const μ„ μ–Έ
const μ„ μ–Έ & μ΄ˆκΈ°ν™” & ν• λ‹Ή

 

 

βœ”  let 

 

// let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λŸ°νƒ€μž„ 이전에 [1.μ„ μ–Έ 단계]κ°€ μ‹€ν–‰λœλ‹€.
// ❗아직 [2.μ΄ˆκΈ°ν™” 단계]λŠ” κ±°μΉ˜μ§€ μ•Šμ•˜λ‹€β—
// ❗[2.μ΄ˆκΈ°ν™” 단계] μ΄μ „μ˜ μΌμ‹œμ  μ‚¬κ°μ§€λŒ€(Temporal Dead Zone)μ—μ„œλŠ” λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μ—†λ‹€.❗

console.log(LET);  // ReferenceError: LET is not defined

// λ³€μˆ˜ μ„ μ–Έλ¬Έμ—μ„œ [2.μ΄ˆκΈ°ν™” 단계]κ°€ μ‹€ν–‰λœλ‹€.

let LET;

console.log(LET);  // undefined

// ν• λ‹Ήλ¬Έμ—μ„œ [3.ν• λ‹Ή 단계]κ°€ μ‹€ν–‰λœλ‹€.

LET = "let";

console.log(LET);  // "let"

 

let μ„ μ–Έ
let μ„ μ–Έ & μ΄ˆκΈ°ν™”
let μ„ μ–Έ & μ΄ˆκΈ°ν™” & ν• λ‹Ή

 

 

πŸ“  ν•¨μˆ˜

 

ν•¨μˆ˜ μ„ μ–Έ

 

 

πŸ“  클래슀

 

클래슀 μ„ μ–Έ

 

λ°˜μ‘ν˜•

λŒ“κΈ€