[JavaScript] var, let, const

2024. 12. 18. 16:40Β·πŸ‘¨‍πŸ’» Programming/JavaScript

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 방법은 var, let, const μ„Έ κ°€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€. ES5κΉŒμ§€ varκ°€ μœ μΌν•œ λ³€μˆ˜ μ„ μ–Έλ¬Έμ΄μ˜€μ§€λ§Œ, ES6 이후 var μ‚¬μš©μ„ μ§€μ–‘ν•˜κ³  let, constλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

κ·Έ μ΄μœ λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  1. varλŠ” λ³€μˆ˜μ˜ 쀑볡선언이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  2. λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…(hoisting)이 λ°œμƒν•˜μ—¬, λ³€μˆ˜ 선언이전에도 μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  3. varλŠ” ν•¨μˆ˜λ ˆλ²¨ μŠ€μ½”ν”„λΌ, ν•¨μˆ˜ λ‚΄λΆ€μ˜ λ³€μˆ˜ μ™Έμ—λŠ” λͺ¨λ‘ μ „μ—­ λ³€μˆ˜κ°€ λ˜λ²„λ¦½λ‹ˆλ‹€.

ν•΄λ‹Ή ν•­λͺ©λ“€μ΄ μ–΄λ–€ λ¬Έμ œκ°€ μƒκΈ°λŠ”μ§€ ν•˜λ‚˜μ”© μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ³€μˆ˜ 쀑볡 μ„ μ–Έ

varλŠ” 같은 μ΄λ¦„μœΌλ‘œ 쀑볡선언이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 쀑볡선언을 ν•˜κ²Œ λœλ‹€λ©΄, μ˜λ„μΉ˜ μ•Šκ²Œ 값이 변경될 수 있고, μ΄λŠ” 였λ₯˜λ‘œ μ΄μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

var name = jin;
var name = kim;

var age = 20;
var age; // μ΄ˆκΈ°ν™”λ¬Έμ΄ μ—†λ‹€λ©΄ λ³€μˆ˜ 선언문은 λ¬΄μ‹œλ©λ‹ˆλ‹€.

console.log(name); // kim
console.log(age); // 20

let name = jin;
let name = kim; // Uncaught SyntaxError: Identifier 'name' has already been declared

ν˜Έμ΄μŠ€νŒ…

var둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ λ³€μˆ˜ 선언문이 μŠ€μ½”ν”„μ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•©λ‹ˆλ‹€.

console.log(hi); // undefined

var hi;
hi = 100;
console.log(hi); // 100

첫 번째 쀄에 λ³€μˆ˜ hiλ₯Ό ν˜ΈμΆœν–ˆμŠ΅λ‹ˆλ‹€. μ°Έμ‘°ν•  λ³€μˆ˜κ°€ μ—†μ–΄ μ°Έμ‘° μ—λŸ¬κ°€ λ°œμƒν•΄μ•Όν•˜μ§€λ§Œ, undefined이 좜λ ₯λ©λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ λ™μž‘ κ³Όμ • λ•Œλ¬Έμž…λ‹ˆλ‹€.

  • μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„ λ™μž‘ κ³Όμ •
    μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° 전에, λ¨Όμ € μ‹€ν–‰λ˜μ–΄ μ†ŒμŠ€μ½”λ“œμ˜ 평가 과정을 κ±°μΉ©λ‹ˆλ‹€.
    평가 κ³Όμ •μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 var, let, const, function, class 등을 μ†ŒμŠ€ μ½”λ“œμ—μ„œ μ°Ύμ•„λ‚΄ λ¨Όμ € μ‹€ν–‰ν•©λ‹ˆλ‹€.
    평가 과정이 λλ‚œ 이후, μœ„μ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ ν•œμ€„μ”© μ½”λ“œλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

λ³€μˆ˜ 선언이 어디에 μ‘΄μž¬ν•˜λ“  μ–΄λ””μ„œλ“  λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 있기 λ•Œλ¬Έμ—, λ³€μˆ˜ 선언문이 μ½”λ“œμ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 고유의 νŠΉμ§•μ„ ν˜Έμ΄μŠ€νŒ…(hoisting)이라고 ν•©λ‹ˆλ‹€.

varκ°€ μ•„λ‹Œ let으둜 μ‹€ν–‰ν•˜λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”?

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

let hi; // λ³€μˆ˜ μ„ μ–Έλ¬Έμ—μ„œ μ΄ˆκΈ°ν™” 단계가 μ‹€ν–‰λ©λ‹ˆλ‹€.
console.log(hi); // undefined
hi = 100; // λ³€μˆ˜ ν• λ‹Ή
console.log(hi); // 100

첫번째 μ½”λ“œμ—μ„œ μ°Έμ‘°μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„ λ™μž‘κ³Όμ •μ—μ„œ let으둜 μ„ μ–Έλœ hiλΌλŠ” λ³€μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ…λ˜μ—ˆμ§€λ§Œ, μ΄ˆκΈ°ν™”λŠ” μ•„μ§λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. let ν‚€μ›Œλ“œλŠ” λ³€μˆ˜ 선언단계와 μ΄ˆκΈ°ν™”λ‹¨κ³„κ°€ λΆ„λ¦¬λ˜κ³ , λ³€μˆ˜ μ΄ˆκΈ°ν™” 전에 λ³€μˆ˜μ— μ ‘κ·Όν•  수 μ—†κΈ° λ•Œλ¬Έμ— μœ„μ™€ 같은 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. (varλŠ” λ³€μˆ˜μ„ μ–Έμ‹œ μ΄ˆκΈ°ν™” 단계가 λ°”λ‘œ μ§„ν–‰λ©λ‹ˆλ‹€.)

즉, let으둜 μ„ μ–Έν•œ μŠ€μ½”ν”„λŠ” ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

μŠ€μ½”ν”„

var둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” μ˜€λ‘œμ§€ ν•¨μˆ˜ λΈ”λ‘λ§Œ μ§€μ—­ μŠ€μ½”ν”„λ‘œ μΈμ •ν•©λ‹ˆλ‹€. ifλ¬Έ, forλ¬Έ λ“±μ˜ κ²½μš°μ—λŠ” μ–΄λ””μ„œλ‚˜ μ°Έμ‘° κ°€λŠ₯ν•œ μ „μ—­ λ³€μˆ˜κ°€ λ©λ‹ˆλ‹€.

var a = 10;

if (true) {
  // ν•¨μˆ˜ 블둝이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ—, μ•„λž˜ aλŠ” μ „μ—­λ³€μˆ˜μ΄κ³ , μ•žμ„œ μ„ μ–Έλœ aκ°€ 있기 λ•Œλ¬Έμ—, 쀑볡선언이 λ©λ‹ˆλ‹€. 
  var a = 100;
}

console.log(a); // 100

let으둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” 블둝 레벨 μŠ€μ½”ν”„λ₯Ό λ”°λ¦…λ‹ˆλ‹€.

let a = 10; // μ „μ—­λ³€μˆ˜

if (true) {
  let a = 100; // μ§€μ—­λ³€μˆ˜
  let b = 200; // μ§€μ—­λ³€μˆ˜
}

console.log(a); // 10
console.log(b); // Uncaught ReferenceError: b is not defined

μš”μ•½

λ³€μˆ˜μ˜ 유효 λ²”μœ„κ°€ 크면 클수둝 μ½”λ“œμ˜ 가독성은 λ‚˜λΉ μ§€κ³ , μ˜λ„μΉ˜ μ•Šκ²Œ μƒνƒœκ°€ 변경될 수 μžˆλŠ” μœ„ν—˜μ΄ 있기 λ•Œλ¬Έμ—, λ³€μˆ˜μ˜ μŠ€μ½”ν”„λŠ” μ’μ„μˆ˜λ‘ μ’‹μŠ΅λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ—, var λŒ€μ‹  let, const(λ³€ν•˜μ§€ μ•ŠλŠ” 값에 constλ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ μš°μ„  기본적으둜 constλ₯Ό μ‚¬μš©ν•˜κ³ , μž¬ν• λ‹Ήμ΄ ν•„μš”ν•œ 경우 let을 μ‚¬μš©)λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

'πŸ‘¨β€πŸ’» Programming > JavaScript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JS] λ°μ΄ν„°νƒ€μž… / μ›μ‹œ κ°’κ³Ό 객체의 비ꡐ  (0) 2025.07.16
[JS] μžλ°”μŠ€ν¬λ¦½νŠΈ μ‚¬μš©μš©λ„, ECMASCRIPT, μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ νŠΉμ§•  (1) 2025.02.07
'πŸ‘¨‍πŸ’» Programming/JavaScript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [JS] λ°μ΄ν„°νƒ€μž… / μ›μ‹œ κ°’κ³Ό 객체의 비ꡐ
  • [JS] μžλ°”μŠ€ν¬λ¦½νŠΈ μ‚¬μš©μš©λ„, ECMASCRIPT, μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ νŠΉμ§•
jinnkimm7
jinnkimm7
[Nothing changes if nothing changes] 개발 κ΄€λ ¨ κΈ€ μœ„μ£Όλ‘œ ν¬μŠ€νŒ… ν•  μ˜ˆμ •μ΄λ©°, κ·Έ 밖에 자기개발/일상/여행에 κ΄€ν•œ 정보도 ν¬μŠ€νŒ… ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.
  • jinnkimm7
    Jin's log
    jinnkimm7
  • 전체
    였늘
    μ–΄μ œ
  • βœοΈκΈ€μ“°κΈ° πŸ¦Ίκ΄€λ¦¬
    • λΆ„λ₯˜ 전체보기 (86)
      • πŸ“š Record (0)
      • πŸ‘¨‍πŸ’» Programming (10)
        • JavaScript (3)
        • React (1)
        • Next.js (2)
        • HTML (0)
        • CSS (1)
        • Java (3)
        • Spring (0)
      • πŸ’» CS (13)
        • Computer Architecture (1)
        • Operation System (2)
        • Data Structure (0)
        • Algorithm (2)
        • Database (7)
        • Network (1)
      • βš™οΈ Tool (12)
        • AWS (2)
        • git (3)
        • VS Code (2)
        • IntelliJ (0)
        • Eclipse (1)
        • Excel (4)
      • πŸ“ Coding Test (37)
        • Programmers Lv0 (6)
        • Programmers Lv1 (1)
        • Programmers Lv2 (2)
        • Programmers Lv3 (1)
        • λ°±μ€€ Bronze (0)
        • λ°±μ€€ Sliver (3)
        • SQL (24)
      • πŸ“– Study (9)
      • πŸ”  English (0)
      • πŸŽ’ Travel (0)
      • πŸ’° Finance (0)
      • πŸ“Œ Etc (3)
  • 링크

    • Resume
  • 인기 κΈ€

  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • νƒœκ·Έ

    μ˜€λΈ”μ™„
    μ½”λ”©ν…ŒμŠ€νŠΈ
    99클럽
    SQL
    java
    MYSQL
    ν‹°μŠ€ν† λ¦¬μ±Œλ¦°μ§€
    μ½”λ”©ν…ŒμŠ€νŠΈμ€€λΉ„
    ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
    git
    λ°˜λ„μ²΄8λŒ€κ³΅μ •
    였라클
    AWS
    ν•­ν•΄99
    vscode
    클래슀
    dynamodb
    λ°±μ€€
    μ½”λ”©ν…ŒμŠ€νŠΈμ—°μŠ΅
    next.js
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
jinnkimm7
[JavaScript] var, let, const
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”