wam
w__am κ°œλ°œλ…ΈνŠΈ
wam
  • λΆ„λ₯˜ 전체보기 (165)
    • CS 지식 (10)
      • 자료ꡬ쑰 (0)
      • μ•Œκ³ λ¦¬μ¦˜ (0)
      • 컴퓨터 ꡬ쑰 (0)
      • 운영체제 (0)
      • λ„€νŠΈμ›Œν¬ (7)
      • λ°μ΄ν„°λ² μ΄μŠ€ (0)
      • λ””μžμΈ νŒ¨ν„΄ (3)
    • Frontend (131)
      • Three.js (64)
      • NPM (1)
      • Nest.js (19)
      • React (10)
      • Apollo (7)
      • TypeScript (2)
      • JavaScript (12)
      • HTML, CSS (1)
      • Jest (3)
      • E2E (5)
      • Cypress (7)
    • Database (12)
      • TypeORM (12)
    • IT 지식 (8)
      • ν΄λΌμš°λ“œ μ„œλΉ„μŠ€ (3)
      • λ„€νŠΈμ›Œν¬ (1)
      • 데이터 포맷 (2)
      • 기타 (2)
    • IT Book (2)
    • μœ μš©ν•œ μ‚¬μ΄νŠΈ (1)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝
  • 🐱 Github

인기 κΈ€

νƒœκ·Έ

  • λ Œλ”λ§ μ„±λŠ₯ μ΅œμ ν™”
  • ν•¨μˆ˜μ˜ λ²”μœ„
  • ν•¨μˆ˜ ν‘œν˜„μ‹
  • math.sin()
  • ν•¨μˆ˜ λ¦¬ν„°λŸ΄
  • axeshelper
  • gridhelper
  • getelapsedtime()
  • μ˜€ν”„-ν”„λ ˆλ―ΈμŠ€(off-premise) 방식
  • 초기 ν™˜κ²½μ„€μ •
  • μ›ν˜•μ μΈ μ›€μ§μž„
  • react μ„±λŠ₯ μ΅œμ ν™”
  • Interface
  • getdelta()
  • type-graphql
  • threejs 개발 ν•  λ•Œ 도움을 쀄 수 μžˆλŠ” μœ ν‹Έλ¦¬ν‹°
  • mapped types
  • e.preventdefault()
  • Decorators
  • three.js ꡬ성 μš”μ†Œ
  • math.cos()
  • λ””μžμΈ νŒ¨ν„΄
  • joi μ—λŸ¬
  • API
  • 데이터 포맷
  • μ‚Όκ°ν•¨μˆ˜
  • isabstract
  • reactive variables
  • μŠ€μ½”ν”„
  • ν•¨μˆ˜ μ„ μ–Έλ¬Έ

졜근 κΈ€

κ΄€λ¦¬μž

κΈ€μ“°κΈ° / μŠ€ν‚¨νŽΈμ§‘ / κ΄€λ¦¬μžνŽ˜μ΄μ§€
hELLO Β· Designed By μ •μƒμš°.
wam

w__am κ°œλ°œλ…ΈνŠΈ

var, let, const 차이
Frontend/JavaScript

var, let, const 차이

2024. 3. 3. 22:11
πŸ’‘λ³€μˆ˜ μ„ μ–Έ 방식
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 (μ§€μ—­ μŠ€μ½”ν”„)

  1. Block Scope : μ€‘κ΄„ν˜Έ {} μ—μ„œλ§Œ 유효
  2. 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
    'Frontend/JavaScript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • μœ μ‚¬ λ°°μ—΄ 객체, μ΄ν„°λŸ¬λΈ”, 래퍼 객체
    • ν•¨μˆ˜ μ •μ˜ (ν•¨μˆ˜ μ„ μ–Έλ¬Έ, ν•¨μˆ˜ ν‘œν˜„μ‹)
    • ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…
    • ν˜Έμ΄μŠ€νŒ…(hoisting)
    wam
    wam

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