Javascript const, let, var

Jongwon Leeยท2023๋…„ 1์›” 6์ผ
0

๐Ÿ“– const | ์ƒ์ˆ˜

โœ

const address = "Yongsan-gu, Seoul";

const๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ฅผ '์ƒ์ˆ˜(constant)'๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ
์žฌํ• ๋‹นํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ƒ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๐Ÿง ๋Œ€๋ฌธ์ž ์ƒ์ˆ˜

๋ณ€์ˆ˜๋ฅผ ๋ณ„์นญ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฐ ์ƒ์ˆ˜๋Š” ๋Œ€๋ฌธ์ž์™€ ๋ฐ‘์ค„๋กœ ๊ตฌ์„ฑ๋œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ๋‹ค.
โœ

const COLOR_RED = "#F00";
const COLOR_GREEN = "#0F0";
const COLOR_BLUE = "#00F";
const COLOR_ORANGE = "#FF7F00";

// ์ƒ‰์ƒ์„ ๊ณ ๋ฅด๊ณ  ์‹ถ์„ ๋•Œ ๋ณ„์นญ์„ ์‚ฌ์šฉ
let color = COLOR_ORANGE;
alert(color); // #FF7F00

๋Œ€๋ฌธ์ž๋กœ ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค.

COLOR_ORANGE๋Š” "#FF7F00"๋ณด๋‹ค ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฝ๋‹ค.
COLOR_ORANGE๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "#FF7F00"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์˜คํƒ€๋ฅผ ๋‚ผ ํ™•๋ฅ  ๋‚ฎ๋‹ค.
COLOR_ORANGE๊ฐ€ #FF7F00๋ณด๋‹ค ์œ ์˜๋ฏธํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ์ฆ๊ฐ€ํ—Œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ธ์ œ ์ผ๋ฐ˜์ ์ธ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์–ธ์ œ ๋Œ€๋ฌธ์ž๋ฅผ ์‚ฌ์šฉ ํ•˜๋Š” ๊ฑธ๊นŒ?

'์ƒ์ˆ˜โ€™๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ์ ˆ๋Œ€ ๋ณ€ํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
๊ทธ์ค‘์—๋Š” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ด๋ฏธ ๊ทธ ๊ฐ’์„ ์•Œ๊ณ  ์žˆ๋Š” ์ƒ์ˆ˜๋„ ์žˆ๊ณ , ๋Ÿฐํƒ€์ž„ ๊ณผ์ •์—์„œ ๊ณ„์‚ฐ๋˜์ง€๋งŒ ์ตœ์ดˆ ํ• ๋‹น ์ดํ›„ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ƒ์ˆ˜๋„ ์žˆ๋‹ค.
์‰ฝ๊ฒŒ ๋งํ•ด ๋Œ€๋ฌธ์ž ์ƒ์ˆ˜๋Š” โ€˜ํ•˜๋“œ ์ฝ”๋”ฉโ€™ ๊ฐ’์˜ ๋ณ„์นญ์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.


๐Ÿ“– let | ๋ณ€์ˆ˜

โœ

let message = "Hello";
alert(message);	// Hello

let ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณ€์ˆ˜(variable)๋ฅผ ์ƒ์„ฑํ•˜๊ณ 
์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์“ฐ์ด๋Š” โ€˜์ด๋ฆ„ ๋ถ™์€ ์ €์žฅ์†Œโ€™ ๊ฐ€ ๋œ๋‹ค.

ํ•œ ์ค„์— ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•
โœ

let user = 'Kazama', age = 21, message = 'Hello';

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ข€ ๋” ์งง์•„ ๋ณด์ด์ง€๋งŒ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๊ณ 
๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ํ•œ ์ค„ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
โœ

let user = 'Kazama';
let age = 21;
let message = 'Hello';

๐Ÿง ๋ณ€์ˆ˜ ๋ช…๋ช… ๊ทœ์น™

Javascript์—์„  ๋ณ€์ˆ˜ ๋ช…๋ช… ์‹œ ๋‘ ๊ฐ€์ง€ ์ œ์•ฝ ์‚ฌํ•ญ์ด ์žˆ๋‹ค.
์ฒซ์งธ. ๋ณ€์ˆ˜๋ช…์—๋Š” ์˜ค์ง ๋ฌธ์ž์™€ ์ˆซ์ž, ๊ทธ๋ฆฌ๊ณ  ๊ธฐํ˜ธ $์™€ _๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
๋‘˜์งธ. ์ฒซ ๊ธ€์ž๋Š” ์ˆซ์ž๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.

โœ

let userName;
let test123;
let $ = 1;
let _ = 2;

์—ฌ๋Ÿฌ ๋‹จ์–ด๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ช…์„ ๋งŒ๋“ค ๊ฒฝ์šฐ ์นด๋ฉœ ํ‘œ๊ธฐ๋ฒ•(camelCase)์ด ํ”ํžˆ ์‚ฌ์šฉ๋˜๋Š”๋ฐ ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ex)userLongName

๐Ÿ“Œ ๋Œ€ยท์†Œ๋ฌธ์ž ๊ตฌ๋ณ„ : apple์™€ AppLE์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์ด๋‹ค.
๐Ÿ“Œ ๋น„ ๋ผํ‹ด๊ณ„ ์–ธ์–ด๋„ ๋ณ€์ˆ˜๋ช…์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
๐Ÿ“Œ ์˜ˆ์•ฝ์–ด(reserved name) ๋ชฉ๋ก์— ์žˆ๋Š” ๋‹จ์–ด๋Š” ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
๐Ÿ“Œ use strict ์—†์ด ํ• ๋‹นํ•˜๊ธฐ. ๋ณ€์ˆ˜๋Š” ๋Œ€๊ฐœ ์ •์˜๋˜์–ด ์žˆ์–ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“– var | ๋ณ€์ˆ˜

var๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” let์œผ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์™€ ์œ ์‚ฌํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„ let์„ var๋กœ, var๋ฅผ let์œผ๋กœ ๋ฐ”๊ฟ”๋„ ํฐ ๋ฌธ์ œ ์—†์ด ๋™์ž‘ํ•œ๋‹ค.
โœ

var message = "Hello";
alert(message);	// Hello

ํ•˜์ง€๋งŒ var๋Š” ์ดˆ๊ธฐ Javascript ๊ตฌํ˜„ ๋ฐฉ์‹ ๋•Œ๋ฌธ์— let๊ณผ const๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์™€๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

๐Ÿง var๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„๊ฐ€ ์—†๋‹ค.

var๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„์ด๊ฑฐ๋‚˜ ์ „์—ญ ์Šค์ฝ”ํ”„์ด๋‹ค. ๋ธ”๋ก ๊ธฐ์ค€์œผ๋กœ ์Šค์ฝ”ํ”„๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋ก ๋ฐ–์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
โœ

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

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

var๋Š” ์ฝ”๋“œ ๋ธ”๋ก์„ ๋ฌด์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— test๋Š” ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋˜๊ณ  ์ „์—ญ ์Šค์ฝ”ํ”„์—์„œ ์ด ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ํ–‰์—์„œ var test๊ฐ€ ์•„๋‹Œ let test๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ๋ณ€์ˆ˜ test๋Š” if๋ฌธ ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
โœ

if (true) {
  let test = true;	// 'let'์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ
}

alert(test);	// Error: test is not defined

๐Ÿง var๋Š” ๋ณ€์ˆ˜์˜ ์ค‘๋ณต ์„ ์–ธ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค

let์€ ํ•œ ์Šค์ฝ”ํ”„์—์„œ ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ๋‘ ๋ฒˆ ์„ ์–ธํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
โœ

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

var๋Š” ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ค‘๋ณต์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฏธ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— var๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ ์„ ์–ธ๋ฌธ์€ ๋ฌด์‹œ๋œ๋‹ค.
โœ

var name = "Peter";
var name = "Ted";	// ์ด ํ–‰์˜ var ๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค
					// ...์—๋Ÿฌ ๋˜ํ•œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
alert(user);	// Ted

๐Ÿง ์„ ์–ธํ•˜๊ธฐ ์ „ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” var

var ์„ ์–ธ์€ ํ•จ์ˆ˜๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ฒ˜๋ฆฌ๋˜๊ณ  ์ „์—ญ์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ผ๋ฉด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
ํ•จ์ˆ˜ ๋ณธ๋ฌธ ๋‚ด์—์„œ var๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ์œ„์น˜์™€ ์ƒ๊ด€์—†์ด ํ•จ์ˆ˜ ๋ณธ๋ฌธ์ด ์‹œ์ž‘๋˜๋Š” ์ง€์ ์—์„œ ์ •์˜๋œ๋‹ค(๋‹จ, ๋ณ€์ˆ˜๊ฐ€ ์ค‘์ฒฉ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ •์˜๋˜์ง€ ์•Š์•„์•ผ ์ด ๊ทœ์น™์ด ์ ์šฉ๋จ)
โœ

function sayHi() {
  var phrase;
  
  phrase = "Hello";

  alert(phrase);
}
sayHi();

์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹๋„ ์œ„์™€ ๋™์ผํ•˜๊ฒŒ ์ธ์‹ํ•œ๋‹ค.
โœ

function sayHi() {
  phrase = "Hello";

  alert(phrase);

  var phrase;
}
sayHi();

์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜๊ฐ€ ๋Œ์–ด์˜ฌ๋ ค ์ง€๋Š” ํ˜„์ƒ์„ ๐Ÿ“Œ'ํ˜ธ์ด์ŠคํŒ…(hoisting)'์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ var๋กœ ์„ ์–ธํ•œ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜์˜ ์ตœ์ƒ์œ„๋กœ โ€˜๋Œ์–ด ์˜ฌ๋ ค์ง€๊ธฐ(hoisted)โ€™ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿง ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ‘œํ˜„์‹

๊ณผ๊ฑฐ์—” var๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ var์˜ ์Šค์ฝ”ํ”„๋Š” ๋ธ”๋ก ๋ ˆ๋ฒจ ์ˆ˜์ค€์ด ์•„๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๊ฐœ๋ฐœ์ž๋“ค์€ var๋„ ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์•ˆ์„ ๊ณ ๋ คํ•˜๊ฒŒ ๋˜๊ณ  ์ด๋•Œ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด ๐Ÿ“Œ'์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ‘œํ˜„์‹(immediately-invoked function expressions)'์ด๋‹ค. ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ IIFE ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.
โœ

// IIFE๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
(function() {
  alert("ํ•จ์ˆ˜๋ฅผ ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ๊ธฐ");
})();

(function() {
  alert("์ „์ฒด๋ฅผ ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ๊ธฐ");
}());

!function() {
  alert("ํ‘œํ˜„์‹ ์•ž์— ๋น„ํŠธ NOT ์—ฐ์‚ฐ์ž ๋ถ™์ด๊ธฐ");
}();

+function() {
  alert("ํ‘œํ˜„์‹ ์•ž์— ๋‹จํ•ญ ๋ง์…ˆ ์—ฐ์‚ฐ์ž ๋ถ™์ด๊ธฐ");
}();

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ํ‘œํ˜„์‹์ฒ˜๋Ÿผ ์ธ์‹๋˜์–ด ๋ฐ”๋กœ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ Javascript ์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
var๋งŒ์˜ ํŠน์„ฑ์€ ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ ์ข‹์ง€ ์•Š์€ ๋ถ€์ž‘์šฉ์„ ๋งŒ๋“ค์–ด ๋ถ€์ž‘์šฉ์„ ์—†์• ๊ธฐ ์œ„ํ•ด let์ด ํ‘œ์ค€์— ๋„์ž…์ด ๋˜์—ˆ๋‹ค.
๋ณ€์ˆ˜๋Š” ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ–๋Š” ๊ฒŒ ์ข‹์œผ๋ฏ€๋กœ ์ด์ œ๋Š” let๊ณผ const๋ฅผ ์ด์šฉํ•ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒŒ ๋Œ€์„ธ๊ฐ€ ๋˜์—ˆ๋‹ค.


๐Ÿ“– ์ •๋ฆฌ

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

const โ€“ let๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
let โ€“ ์ผ๋ฐ˜์ ์ธ ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ.
var โ€“ ์˜ค๋ž˜๋œ ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ. ์ง€๊ธˆ์€ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ถ”์„ธ์ด๋‹ค.

๋ณ€์ˆ˜๋ช…์€ ๋ณ€์ˆ˜๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์ง€์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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