๐Ÿ“– let, const ํ‚ค์›Œ๋“œ์™€ ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

c_yjยท2022๋…„ 6์›” 26์ผ
0

DeepDive

๋ชฉ๋ก ๋ณด๊ธฐ
12/42
post-thumbnail

โœ”๏ธ var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์˜ ๋ฌธ์ œ์ 

โญ๏ธ ๋ณ€์ˆ˜ ์ค‘๋ณต ์„ ์–ธ ํ—ˆ์šฉ

var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์ค‘๋ณต ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

var x = 1;
var y = 1;

// var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๊ฐ™์€ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ ์ค‘๋ณต ์„ ์–ธ์„ ํ—ˆ์šฉํ•œ๋‹ค
// ์ดˆ๊ธฐํ™”๋ฌธ์ด ์žˆ๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด var ํ‚ค์›Œ๋“œ๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.
var x = 100;
// ์ดˆ๊ธฐํ™”๋ฌธ์ด ์—†๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์€ ๋ฌด์‹œ๋œ๋‹ค.
var y;

console.log(x); // 100

โญ๏ธ ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์˜ค๋กœ์ง€ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ ๋ธ”๋ก๋งŒ์„ ์ง€์—ญ ์Šค์ฝ”ํ”„๋กœ ์ธ์ •ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด์—์„œ ์„ ์–ธํ•ด๋„ ๋ชจ๋‘ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค.

var i = 10;
// for๋ฌธ์—์„œ ์„ ์–ธํ•œ i๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋‹ค. ์ด๋ฏธ ์„ ์–ธ๋œ ์ „์—ญ ๋ณ€์ˆ˜ i๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ค‘๋ณต ์„ ์–ธ๋œ๋‹ค.
for (var i = 0; i < 5; i++) {
  console.log(i); // 0 1 2 3 4 
}

// ์˜๋„์น˜ ์•Š๊ฒŒ i ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.
console.log(i); // 5

ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‚จ๋ฐœํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ธ๋‹ค. ์ด๋กœ ์ธํ•ด ์˜๋„์น˜ ์•Š๊ฒŒ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์ค‘๋ณต ์„ ์–ธ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

โญ๏ธ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

var ํ‚ค์›Œ๋“œ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ•ด ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์ด ์Šค์ฝ”ํ”„์˜ ์„ ๋‘๋กœ ๋Œ์–ด ์˜ฌ๋ ค์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

โœ”๏ธ let ํ‚ค์›Œ๋“œ

โญ๏ธ ๋ณ€์ˆ˜ ์ค‘๋ณต ์„ ์–ธ ๊ธˆ์ง€

let ํ‚ค์›Œ๋“œ๋กœ ์ด๋ฆ„์ด ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ์ค‘๋ณต ์„ ์–ธํ•˜๋ฉด ๋ฌธ๋ฒ• ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

โญ๏ธ ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

let ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ ๋ธ”๋ก(ํ•จ์ˆ˜,if๋ฌธ, for๋ฌธ, while๋ฌธ, try/catch ๋ฌธ ๋“ฑ)์„ ์ง€์—ญ ์Šค์ฝ”ํ”„๋กœ ์ธ์ •ํ•˜๋Š” ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

left foo = 1; // ์ „์—ญ ๋ณ€์ˆ˜

{
  let foo = 2; // ์ง€์—ญ ๋ณ€์ˆ˜
  let bar = 3; // ์ง€์—ญ ๋ณ€์ˆ˜
}

console.log(foo); // 1
console.log(bar); // ReferenceError : bar is not defined

โญ๏ธ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์™€ ๋‹ฌ๋ฆฌ let ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

  • var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์„ ์–ธ ๋‹จ๊ณ„์™€ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๊ฐ€ ์‹คํ–‰๋œ๋‹ค
  • ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์— ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

let ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” '์„ ์–ธ ๋‹จ๊ณ„'์™€ '์ดˆ๊ธฐํ™” ๋‹จ๊ณ„'๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์ง„ํ–‰๋œ๋‹ค

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

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ES6์—์„œ ๋„์ž…๋œ let, const๋ฅผ ํฌํ•จํ•ด์„œ ๋ชจ๋“  ์„ ์–ธ(var, let, const, function*, class ๋“ฑ)์„ ํ˜ธ์ด์ŠคํŒ… ํ•œ๋‹ค.
๋‹จ, ES6์—์„œ ๋„์ž…๋œ let, const, class๋ฅผ ์‚ฌ์šฉํ•œ ์„ ์–ธ๋ฌธ์€ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

โญ๏ธ ์ „์—ญ ๊ฐ์ฒด์™€ let

var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ „์—ญ ํ•จ์ˆ˜, ๊ทธ๋ฆฌ๊ณ  ์„ ์–ธํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•œ ์•”๋ฌต์  ์ „์—ญ์€ ์ „์—ญ๊ฐ์ฒด window์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋œ๋‹ค. ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ window๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
let ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์•„๋‹ˆ๋‹ค.

โœ”๏ธ Const ํ‚ค์›Œ๋“œ

const ํ‚ค์›Œ๋“œ๋Š” ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. const ํ‚ค์›Œ๋“œ์˜ ํŠน์ง•์€ let ํ‚ค์›Œ๋“œ์™€ ๋Œ€๋ถ€๋ถ„ ๋™์ผํ•˜๋ฏ€๋กœ ๋‹ค๋ฅด์ ์„ ์ค‘์‹ฌ์œผ๋กœ ์‚ดํŽด๋ณด์ž/

โญ๏ธ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”

const ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

const foo; // SyntaxError : Missing initializer in const delaration

const ํ‚ค์›Œ๋“œ๋„ let๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

โญ๏ธ ์žฌํ• ๋‹น ๊ธˆ์ง€

var ๋˜๋Š” let ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์žฌํ• ๋‹น์ด ์ž์œ ๋กœ์šฐ๋‚˜ const ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์žฌํ• ๋‹น์ด ๊ธˆ์ง€๋œ๋‹ค.

โญ๏ธ ์ƒ์ˆ˜

์ƒ์ˆ˜๋Š” ์žฌํ• ๋‹น์ด ๊ธˆ์ง€๋œ ๋ณ€์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ์ƒ์ˆ˜๋Š” ์ƒํƒœ ์œ ์ง€์™€ ๊ฐ€๋…์„ฑ, ์œ ์ง€๋ณด์ˆ˜์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

// ์„ธ์œจ์„ ์˜๋ฏธํ•˜๋Š” 0.1์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ์ƒ์ˆ˜๋กœ์„œ ์‚ฌ์šฉ๋  ๊ฐ’์ด๋‹ค.
// ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋Œ€๋ฌธ์ž๋กœ ์„ ์–ธํ•ด ์ƒ์ˆ˜์ž„์„ ๋ช…ํ™•ํžˆ ๋‚˜ํƒ€๋‚ธ๋‹ค.
const TAX_RATE = 0.1;

// ์„ธ์ „ ๊ฐ€๊ฒฉ
let preTaxPrice = 100;

// ์„ธํ›„ ๊ฐ€๊ฒฉ
let afterTaxPrice = preTaxPrice + (PreTaxPrice * TAX_RATE);

console.log(afterTaxPrice); // 110

โญ๏ธ const ํ‚ค์›Œ๋“œ์™€ ๊ฐ์ฒด

const ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ ๊ฒฝ์šฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

const person = {
  name: 'Lee'
};

// ๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋‹ค. ๋”ฐ๋ผ์„œ ์žฌํ• ๋‹น ์—†์ด ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
person.name = 'Kim';

console.log(person); // {name: "Kim"}

โœ”๏ธ var vs let vs const

๋ณ€์ˆ˜ ์„ ์–ธ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ const๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  let์€ ์žฌํ• ๋‹น์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ํ•œ์ •ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜๋„์น˜ ์•Š์€ ์žฌํ• ๋‹น์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ๋–„๋ฌธ์— ์ข€ ๋” ์•ˆ์ „ํ•˜๋””.

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

๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ์‹œ์ ์—๋Š” ์žฌํ• ๋‹น์ด ํ•„์š”ํ•œ์ง€ ์ž˜ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด๋Š” ์˜์™ธ๋กœ ์žฌํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ฌผ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋–„๋Š” ์ผ๋‹จ const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ž. ์žฌํ• ๋‹น์ด ํ•„์š”ํ•˜๋‹ค์‹ถ์œผ๋ฉด const ํ‚ค์›Œ๋“œ๋ฅผ let ํ‚ค์›Œ๋“œ๋กœ ๋ณ€๊ฒฝํ•ด์„œ ์‚ฌ์šฉํ•˜์ž.

profile
FrontEnd Developer

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