๐Ÿง‘‍๐Ÿ’ป Web/JavaScript

[JS] ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜์™€ ์“ฐ์ž„์ƒˆ - var, let, const

Lennon 2022. 1. 22. 23:06
728x90
๋ฐ˜์‘ํ˜•

๋‹ค๋“ค ์•Œ๋‹ค์‹œํ”ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜๋Š” var, let, const 3์ข…๋ฅ˜๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์šฐ์„  var, let, const์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ธ ์ข…๋ฅ˜๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ์„ ๋•Œ ์–ด๋Š ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.


var

var๋Š” let, const๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์ด์ „์— ๋ณ€์ˆ˜์„ ์–ธ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋˜ ๋ฌธ์ด๋‹ค. 

ES6์—์„œ let, const๊ฐ€ ๋“ฑ์žฅ์œผ๋กœ ์ธํ•ด ๋Œ€๋ถ€๋ถ„ ์ปจ๋ฐด์…˜์—์„œ๋Š” ๋ณ€์ˆ˜๋ฅผ var๋กœ ์„ ์–ธํ•˜๋Š” ๊ฑธ ์ž์ œํ•˜๋ผ๊ณ  ํ•œ๋‹ค. ์™œ๊ทธ๋Ÿด๊นŒ?

 

let, const์™€ ๋‹ฌ๋ฆฌ var๊ฐ€ ๊ฐ€์ง€๋Š” ํŠน์ง•์ด ๋ช‡ ๊ฐœ ์žˆ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ ๊ฐ’์„ ์ƒˆ๋กœ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž.

var x = 10;
var x = 20; // x = 20

let x = 10;
let x = 20; // type Error

let y = 10;
y = 20 // y = 20

var๋Š” let, const์™€ ๋‹ค๋ฅด๊ฒŒ ๋‹ค์‹œ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Š” ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์ง€๋งŒ, ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

์—๋Ÿฌ๋ฅผ ์•Œ๋ ค์ฃผ์ง€ ์•Š์•„ ์ด ์ „์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์™€ ๋„ค์ด๋ฐ์ด ๊ฐ™๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

a = 10;
var a;

b = 10; // ReferenceError
let b;

๋˜ํ•œ ํ• ๋‹น์„ ๋จผ์ €ํ•ด์ฃผ๊ณ  ์„ ์–ธ์„ ๋‚˜์ค‘์— ํ•ด๋„ ์„ฑ๋ฆฝ์ด ๋œ๋‹ค. ์ด๋Š” ํ˜ธ์ด์ŠคํŒ…๊ณผ ๊ด€๋ จ์ด ์žˆ๋Š”๋ฐ ์ด๋Š” ์ถ”ํ›„์— ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜์ž.

var๋Š” let๊ณผ const์™€ ๋‹ค๋ฅธ ํŠน์ดํ•œ ๋†ˆ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

์ •๋ฆฌํ•˜์ž๋ฉด var๋ฌธ์€ ์š”์ฆ˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ถ”์„ธ์ด๋ฉฐ, let๊ณผ const๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. 

 


let

let์€ var๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์ด๋‹ค. 

๋ณ€์ˆ˜๋กœ ์œ ๋™์ ์ธ ๊ฐ’์ด๋‚˜, ์ถ”ํ›„์— ๋ณ€๋™ํ•  ๊ฐ’์„ ์ง€์ •ํ•˜๋ ค๋ฉด let์œผ๋กœ ๋ณ€์ˆ˜ ์„ ์–ธํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ฆ‰ let์œผ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ex) ๋งค๋‹ฌ 1kg์”ฉ ๋Š˜๋ฆฌ๊ธฐ!

let weights = 50;

for(let i = 0; i < 12; i++){
	weights += 1;
}

console.log(weights) // 62

๋˜ํ•œ let์€ ์„ ์–ธ๋งŒํ•˜๊ณ  ์ดˆ๊ธฐํ™”๋ฅผ ์•ˆ ํ•ด์ค˜๋„ ๋™์ž‘ํ•œ๋‹ค.

let value;

console.log(value) // undifiend

 


const

 

const๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ƒ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ, ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’, ๊ฐ์ฒด๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์ด๋‹ค.

const๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. 

const a = 10;
a = 20; // TypeError

ํ—ˆ๋‚˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋งŒ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ,

ํ•ด๋‹น ๋ณ€์ˆ˜ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋Š” ๋ณดํ˜ธ๋˜์ง€ ์•Š์•„์„œ ๊ฐ€๋Šฅํ•˜๋‹ค.

const arr = [1,2,3];
const obj = {
	name = 'hi';
}

obj.age = 20;
arr.push(4);
arr.shift();  

console.log(obj.age) // 20
console.log(arr) // [2,3,4]

๋˜ํ•œ ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ค˜์•ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

const a; // Type Error
a = 10; 

const b = 20;

 

๋‹ค์Œ ๊ฐ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์˜ ์Šค์ฝ”ํ”„์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

Scope(์œ ํšจ ๋ฒ”์œ„)

์Šค์ฝ”ํ”„๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ์„ ๋•Œ ์œ ํšจํ•œ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋ธ”๋ก๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„์™€ ํ•จ์ˆ˜๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

๋Œ€๋‹ค์ˆ˜์˜ ์–ธ์–ด๋Š” ๋ธ”๋ก๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅด์ง€๋งŒ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

๋ธ”๋ก๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

๋ชจ๋“  ์ฝ”๋“œ ๋ธ”๋ก(ํ•จ์ˆ˜, if๋ฌธ, for๋ฌธ, while๋ฌธ ๋“ฑ) ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๋‹ค. ๋ธ”๋ก ๋‚ด๋ถ€์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์ด๋ฉฐ ์™ธ๋ถ€์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.

ํ•จ์ˆ˜๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๋ฉฐ ์ด๋ฅผ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค. ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์ด๋ฉฐ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ์ „์—ญ ๋ณ€์ˆ˜์ด๋‹ค.

 

var์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ์ฆ‰ ๋ธ”๋ก ๋‚ด์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ฅผ ๋ฐ–์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ „์—ญ์ ์œผ๋กœ ๋ณ€์ˆ˜๊ฐ€ ์˜ํ–ฅ์„ ๋ผ์น˜๋ฏ€๋กœ,

์ด๋Š” ์˜๋„ํ•˜์ง€ ์•Š์€ ์ด์ƒ ๋งŽ์€ ๋ฌธ์ œ์ ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

if (true) {
  var x = 10;
}
console.log(x);

 

๋ฐ˜๋ฉด let, const ์„ ์–ธ๋ฌธ์€ ๋ธ”๋ก๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

if (true) {
  let x = 10;
  const y = 10;
}
console.log(x); // ReferenceError: x is not defined
console.log(x); // ReferenceError: y is not defined

 

ES6์—์„œ ๋ณ€์ˆ˜ ์„ ์–ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

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

 

728x90
๋ฐ˜์‘ํ˜•