var ๐Ÿ†š let, const (+ ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •, TDZ)

๊น€์˜ˆ์ง€ยท2022๋…„ 3์›” 6์ผ
3

๊ณต๋ถ€ ํ”์  ๐Ÿ“š

๋ชฉ๋ก ๋ณด๊ธฐ
5/5

javascript์—์„œ ECMA2015(ES6) ๋ฌธ๋ฒ•์ด ํ‘œ์ค€ํ™” ๋˜๋ฉด์„œ, ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ES6 ์ด์ „์— ์“ฐ๋˜ var์€ ์ง€์–‘ํ•˜๊ณ  ES6์˜ ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ•์ธ let๊ณผ const๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ง€ํ–ฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
์‹ค์ œ๋กœ var์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๋ฌธ๋ฒ•์ด let, const์ด๊ธฐ ๋•Œ๋ฌธ์ด๊ธฐ๋„ ํ•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, var์˜ ํŠน์ง•์€ ๋ฌด์—‡์ด๊ณ  ์™œ let, const๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ธ์ง€ ๊ณต๋ถ€ํ•ด๋ดค๋‹ค.

var, let, const์˜ ํŠน์ง•์„ ์‚ดํŽด๋ณด๊ธฐ ์ „์—, ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •๊ณผ TDZ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.

๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •(์„ ์–ธ-์ดˆ๊ธฐํ™”-ํ• ๋‹น)


javascript์—์„œ ๋ณ€์ˆ˜๋Š” 3๋‹จ๊ณ„์— ๊ฑธ์ณ์„œ ์ƒ์„ฑ๋œ๋‹ค.

  • ์„ ์–ธ ๋‹จ๊ณ„(declaration phase)
    ๋ณ€์ˆ˜๋ฅผ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ๋“ฑ๋กํ•œ๋‹ค. ์ด ๋ณ€์ˆ˜ ๊ฐ์ฒด๋Š” ์Šค์ฝ”ํ”„๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋Œ€์ƒ์ด ๋œ๋‹ค.
  • ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„(initialization phase)
    ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ๋“ฑ๋ก๋œ ๋ณ€์ˆ˜๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์„ ๋ฉ”๋ชจ๋ฆฌ์— ํ™•๋ณดํ•œ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ๋ณ€์ˆ˜๋Š” undefined๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค.
  • ํ• ๋‹น ๋‹จ๊ณ„(assignment phase)
    undefined๋กœ ์ดˆ๊ธฐํ™”๋œ ๋ณ€์ˆ˜์— ์‹ค์ œ ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค.

var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š”, ์„ ์–ธ + ์ดˆ๊ธฐํ™”๊ฐ€ ํ•œ๋ฒˆ์— ์ด๋ฃจ์–ด์ง„๋‹ค.
๋”ฐ๋ผ์„œ, ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ดํ›„ ๋ณ€์ˆ˜ ํ• ๋‹น๋ฌธ์—์„œ ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.

const, let ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์ง„ํ–‰๋œ๋‹ค. ์ฆ‰, ์Šค์ฝ”ํ”„์— ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ ํ•˜์ง€๋งŒ, ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์ด๋ค„์ง„๋‹ค. ์ดˆ๊ธฐํ™” ์ด์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ณ€์ˆ˜๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์•„์ง ํ™•๋ณด๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ ์—๋Ÿฌ(ReferenceError)๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋”ฐ๋ผ์„œ, ์Šค์ฝ”ํ”„ ์‹œ์ž‘ ๋ถ€ํ„ฐ ์ดˆ๊ธฐํ™” ์‹œ์ž‘ ์‹œ์ ๊นŒ์ง€ ๊ตฌ๊ฐ„์„ TDZ๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , let๊ณผ const๋Š” ์ด TDZ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.

TDZ



TDZ(Temporal Dead Zone), ์ฆ‰ ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€๋Š” ์„ ์–ธ ๋‹จ๊ณ„์™€ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„ ์‚ฌ์ด์—์„œ ๋ณ€์ˆ˜์— ์ ‘๊ทผ(์ฐธ์กฐ)ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
var์€ ์ด๋Ÿฌํ•œ TDZ ์˜์—ญ์— ๋“ค์–ด์™€๋„ ์—๋Ÿฌ๊ฐ€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, TDZ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ์‹ค์งˆ์ ์œผ๋กœ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ var์€ ์„ ์–ธ + ์ดˆ๊ธฐํ™”๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์„ ์–ธ ์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•œ๋‹ค๊ณ  ํ•˜์—ฌ TDZ์— ๋“ค์–ด๊ฐˆ ์ผ์ด ์—†๋‹ค.
ํ•˜์ง€๋งŒ, let๊ณผ const๋Š” ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๊ฐ€ ์‹ค์ œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ ์–ธ๋ฌธ ์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด TDZ ์˜์—ญ์— ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ดˆ๊ธฐํ™” ์ด์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ฉด ๋ณ€์ˆ˜๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ReferenceError(์ฐธ์กฐ ์—๋Ÿฌ)๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

var


1. var ํ‚ค์›Œ๋“œ ์ƒ๋žต์„ ํ—ˆ์šฉํ•œ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ, var ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•ด๋„ ์ธ์ •ํ•ด์ค€๋‹ค.
๋”ฐ๋ผ์„œ, ์•”๋ฌต์  ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค.

2. var์€ ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง„๋‹ค.

ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ž€ ๋ฌด์—‡์ผ๊นŒ?

function sayHi() {
  if (true) {
    var phrase = "Hello";
  }

  alert(phrase); // ์ œ๋Œ€๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
}

sayHi();
alert(phrase); // Error: phrase is not defined

์œ„ ์˜ˆ์ œ๋Š” ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ด๋‹ค. var์€ ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•จ์ˆ˜ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” phrase ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ํ•จ์ˆ˜ ๋‚ด์—์„œ alert(phrase)๋ฅผ ํ˜ธ์ถœ ํ–ˆ์„ ๋•Œ๋Š” ์ž˜ ์ถœ๋ ฅ์ด ๋˜์ง€๋งŒ, ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ alert(phrase)๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ๋Š” undefined ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค.

if (true) {
  var test = true; // 'let' ๋Œ€์‹  'var'๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
}

alert(test); // true (if ๋ฌธ์ด ๋๋‚ฌ์–ด๋„ ๋ณ€์ˆ˜์— ์—ฌ์ „ํžˆ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ)

์—ฌ๊ธฐ์„œ if๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ, '์ฝ”๋“œ ๋ธ”๋ก'์ด๋‹ค. var์€ ๋ธ”๋ก ์Šค์ฝ”ํ”„๊ฐ€ ์•„๋‹Œ, 'ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„'์ด๊ธฐ ๋•Œ๋ฌธ์—, var์€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ฝ”๋“œ ๋ธ”๋ก์„ ๋ฌด์‹œํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ „์—ญ์—์„œ test ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ, ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ณณ์—์„œ ์„ ์–ธํ•œ var์€ ๋ชจ๋‘ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‚จ๋ฐœํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋†’ํ˜€์„œ, ๋‚˜์ค‘ ํฐ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

3. ์žฌํ• ๋‹น, ์žฌ์„ ์–ธ(์ค‘๋ณต์„ ์–ธ)์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์—๋Ÿฌ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค)

var name = '์ด๋ฆ„1';
var name = '์ด๋ฆ„2';
var name = '์ด๋ฆ„3';

console.log(name); //์ด๋ฆ„3

์œ„์™€ ๊ฐ™์ด, ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์žฌ์„ ์–ธ ๋ฐ ์žฌํ• ๋‹น ํ–ˆ์œผ๋‚˜, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์„ ์–ธ ๋ฐ ํ• ๋‹น๋œ '์ด๋ฆ„3'์ด ์ถœ๋ ฅ๋œ๋‹ค.
์ค‘๋ณต ์„ ์–ธํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€, ์˜๋„์น˜ ์•Š๋Š” ๋ณ€์ˆ˜๊ฐ’์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์œ„ํ—˜ํ•˜๋‹ค.

4. var ์„ ์–ธ์€ ์Šคํฌ๋ฆฝํŠธ ์‹œ์ž‘๋˜๋Š” ์‹œ์ ์— ํ˜ธ์ด์ŠคํŒ…๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ ์„ ์–ธ ์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

//var name; ํ˜ธ์ด์ŠคํŒ… ๋œ๋‹ค. 

console.log(name); //undefined

var name = '์ด๋ฆ„';

์„ ์–ธ์€ ํ˜ธ์ด์ŠคํŒ…(๋Œ์˜ฌ)๋˜์ง€๋งŒ, ํ• ๋‹น์€ ํ˜ธ์ด์ŠคํŒ… ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ console.log(name)์„ ํ˜ธ์ถœํ•˜๋ฉด ํ• ๋‹นํ•œ ๊ฐ’์€ ํ˜ธ์ด์ŠคํŒ… ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— undefined๊ฐ€ ์ถœ๋ ฅ์ฐฝ์— ๋œฌ๋‹ค. undefined๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ์€ ๋˜์—ˆ์œผ๋‚˜, ์–ด๋– ํ•œ ๊ฐ’๋„ ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ฅผ ๋œปํ•œ๋‹ค.
์•„๋ฌดํŠผ, undefined๊ฐ€ ๋œฐ ๋ฟ ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, var์€ ์„ ์–ธ๋˜๊ธฐ๋„ ์ „๋ถ€ํ„ฐ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Š” var์€ TDZ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.

let, const


1. let, const๋Š” ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง„๋‹ค.

๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ž€, ๋ชจ๋“  ์ฝ”๋“œ ๋ธ”๋ก(ํ•จ์ˆ˜, if, for, while, try/catch ...) ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๋ฉฐ ์ฝ”๋“œ ๋ธ”๋ก ์™ธ๋ถ€์—์„œ๋Š” ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Œ์„ ๋œปํ•œ๋‹ค. ์ฆ‰, ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด๋ถ€์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์ด๋‹ค.
์ด๋Š” ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„์—ฌ์„œ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‚จ๋ฐœ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•˜๋˜ var์˜ ํ•œ๊ณ„๋ฅผ ๊ฐœ์„ ํ•œ ๋ถ€๋ถ„์ด๋‹ค.

2. let, const๋Š” ์žฌ์„ ์–ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

var์€ ์žฌ์„ ์–ธ์ด ๊ฐ€๋Šฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์˜๋„์น˜ ์•Š์€ ๋ณ€์ˆ˜์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚  ์ˆ˜๋„ ์žˆ๋Š” ์œ„ํ—˜์ด ์žˆ์—ˆ๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•œ let, const๋Š” ์žฌ์„ ์–ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

3. ์„ ์–ธ ์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

๋งŒ์•ฝ ์„ ์–ธ๋ฌธ ์ด์ „์— ์ฐธ์กฐํ•˜๋ฉด ์ฐธ์กฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (ReferenceError)
์ด๋Š” const, let์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์Šค์ฝ”ํ”„์˜ ์‹œ์ž‘์—์„œ ๋ณ€์ˆ˜์˜ ์„ ์–ธ๊นŒ์ง€ TDZ์— ๋น ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (TDZ๋Š” ์œ„ ์„ค๋ช… ์ฐธ๊ณ )

console.log(foo); // undefined
var foo;

console.log(bar); // Error: Uncaught ReferenceError: bar is not defined
let bar;

ํ•˜์ง€๋งŒ, ์ฃผ์˜ํ•  ๊ฒƒ์€ const, let์ด ์„ ์–ธ ์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํ•ด์„œ ํ˜ธ์ด์ŠคํŒ…์ด ์•ˆ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
ํ˜ธ์ด์ŠคํŒ…์ด๋ž€, ์Šค์ฝ”ํ”„์•ˆ์—์žˆ๋Š” ์„ ์–ธ๋“ค์„ ๋ชจ๋‘ ์Šค์ฝ”ํ”„์˜ ์ตœ์ƒ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. var ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, let, const ์—ญ์‹œ ํ˜ธ์ด์ŠคํŒ…์ด ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ let, const๋Š” ์„ ์–ธ ์ „์— ํ˜ธ์ถœํ•˜๋ฉด ReferenceError๊ฐ€ ๋–ด๋Š”๋ฐ...?

๋งŒ์•ฝ, let, const๊ฐ€ ํ˜ธ์ด์ŠคํŒ…์ด ์•ˆ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

name = 'hello' // ReferenceError: Cannot access 'name' before initialization
let name = 'hi'

๋งŒ์•ฝ, ํ˜ธ์ด์ŠคํŒ…์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋‘๋ฒˆ์งธ let ์„ ์–ธ์—์„œ already declared ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์—๋Ÿฌ ๋‚ด์šฉ์€ ReferenceError, ์ฆ‰ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ ์ „์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‚ด์šฉ์ด๋‹ค.

๊ฒฐ๋ก 


๋ณ€์ˆ˜๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ์ข‹๊ธฐ ๋•Œ๋ฌธ์—, var์€ ์ง€์–‘ํ•ด์•ผํ•œ๋‹ค.
ES6์—์„œ๋Š” var์€ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž.
์žฌํ• ๋‹น์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ํ•œํ•ด let์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ ๋ธ”๋ก์„ ์ตœ๋Œ€ํ•œ ์ข๊ฒŒ ๋งŒ๋“ค์ž.
๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฐ’์—๋Š” const๋ฅผ ์‚ฌ์šฉํ•˜์ž. const๋Š” ์žฌํ• ๋‹น์„ ๊ธˆ์ง€ํ•˜๋ฏ€๋กœ var, let๋ณด๋‹ค ์•ˆ์ „ํ•˜๋‹ค! (์˜๋„์น˜ ์•Š์€ ์žฌํ• ๋‹น์„ ๋ฐฉ์ง€ํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๋‹ค ์•ˆ์ „ํ•˜๋‹ค)
์ผ๋‹จ const ์‚ฌ์šฉํ•˜๊ณ , ๋‚˜์ค‘ ์žฌํ• ๋‹น ํ•„์š”ํ•˜๋ฉด let์œผ๋กœ ๋ณ€๊ฒฝํ•˜์ž.


๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

profile
๋‚ด๊ฐ€ ์งฑ์ด๋‹ค ๐Ÿ˜Ž ๋งค์ผ ์กฐ๊ธˆ์”ฉ ์„ฑ์žฅํ•˜๊ธฐ๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€