๐Ÿ” ํ˜ธ์ด์ŠคํŒ…

2ใ…ฃ2ใ…ฃยท2024๋…„ 3์›” 22์ผ

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
4/14
post-thumbnail

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์•Œ์•„๋ณด์•˜๋‹ค.
์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ณ€์ˆ˜ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ๋‹ค.
์„ ์–ธ๊ณผ ํ• ๋‹น์€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๊ณ  ๊ฐ ์„ ์–ธ์ž์— ๋”ฐ๋ผ ์–ด๋–ค ํŠน์ง•์ด ์žˆ๋Š”์ง€! ๐Ÿš— ๐Ÿ’จ ๐Ÿ’จ

๐Ÿ“Œ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ํ• ๋‹น

๋ณ€์ˆ˜๋ž€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ์‹๋ณ„์ž๋กœ์จ, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์™€ ๋งคํ•‘ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋‹ค. ์ฆ‰, ๋ณ€์ˆ˜๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
๋ณ€์ˆ˜๋Š” ์„ ์–ธ - ์ดˆ๊ธฐํ™” - ํ• ๋‹น ์˜ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

์„ ์–ธ์ด๋ž€?

๋ณ€์ˆ˜๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ , ๋ณ€์ˆ˜๋ช…๊ณผ ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๋ง์ด ์–ด๋ ค์šด๋ฐ, ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์…€์— ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„๋‹จ๊ณ„์ด๋‹ค.
์ฆ‰, ํ•ด๋‹น ์…€์— ์ €์žฅํ•œ ๊ฐ’์ด ์—†๊ณ  ์ด๋Š” ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ƒํƒœ์ž„์„ ์˜๋ฏธํ•œ๋‹ค.

์ดˆ๊ธฐํ™”๋ž€?

๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์ดํ›„ ์ตœ์ดˆ๋กœ ๊ฐ’์„ ํ• ๋‹นํ•œ ๊ฒƒ์ด๋‹ค. ์„ ์–ธ์ž์— ๋”ฐ๋ผ ์ดˆ๊ธฐํ™”๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ์ด๋ค„์งˆ์ˆ˜๋„, ์ด๋ค„์ง€์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฐ‘์—์„œ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ž.

ํ• ๋‹น์ด๋ž€?

์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”๋ฅผ ๊ฑฐ์นœ ๋ฉ”๋ชจ๋ฆฌ ์…€์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

var score=80;

์œ„์ฒ˜๋Ÿผ ์„ ์–ธ๊ณผ ํ• ๋‹น์„ ํ•˜๋‚˜์˜ ๋ฌธ์œผ๋กœ ๋‹จ์ถ•ํ•ด์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ฃผ์˜ํ•  ์ ์€ ์„ ์–ธ๊ณผ ํ• ๋‹น์ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
๋ณ€์ˆ˜ ์„ ์–ธ์€ ๋Ÿฐํƒ€์ž„ ์ด์ „์— ๋จผ์ € ์‹คํ–‰๋˜๊ณ  ํ• ๋‹น์€ ๋Ÿฐํƒ€์ž„์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์ด๋Š” ํ˜ธ์ด์ŠคํŒ…๊ณผ ์—ฐ๊ด€์ด ๊นŠ์œผ๋ฏ€๋กœ ์—ญ์‹œ ๋ฐ‘์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.

๋งŒ์•ฝ ์žฌํ• ๋‹น์ด ์ด๋ค„์ง„๋‹ค๋ฉด?

var x=10; //๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ๊ฐ’ ํ• ๋‹น
x=30; //๊ฐ’ ์žฌํ• ๋‹น

์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•  ๊ฒƒ ์—†์ด ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ™•๋ณดํ•˜๊ณ  ์…€ ์•ˆ์— ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
์ฆ‰, ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹นํ•  ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์›๋ž˜ ๋ฉ”๋ชจ๋ฆฌ ์…€์— ์ €์žฅ๋˜์–ด ์žˆ๋˜ ๊ฐ’๋“ค์€ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž๋™ ํ•ด์ œ๋œ๋‹ค.

๋ณ€์ˆ˜์˜ ์„ ์–ธ-์ดˆ๊ธฐํ™”-ํ• ๋‹น-(์žฌํ• ๋‹น) ์„ ์•Œ์•„๋ณด์•˜๋‹ค.
๋ช‡๊ฐ€์ง€ ์˜๋ฌธ์ ์ด ์ƒ๊ฒผ์„ ๊ฒƒ์ด๋‹ค.
์˜ˆ์ปจ๋ฐ, ์„ ์–ธ์ž์— ๋”ฐ๋ผ ์ดˆ๊ธฐํ™” default value๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ์ , ์„ ์–ธ๊ณผ ํ• ๋‹น์„ ํ•˜๋‚˜์˜ ๋ฌธ์œผ๋กœ ์ž‘์„ฑํ–ˆ์Œ์—๋„ ๋™์‹œ์— ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด ๊ทธ๋Ÿด ๊ฒƒ์ด๋‹ค.
๊ทธ ์ด์œ ๋ฅผ ์•Œ์•„๋ณด์ž ๐Ÿš—๐Ÿ’จ๐Ÿ’จ

๐Ÿ“Œ ํ˜ธ์ด์ŠคํŒ…

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

console.log(v); // undefined
var v = 5;
console.log(v); // 5

์œ„์˜ ์ฝ”๋“œ์—์„œ ํŠน์ด์ ์ด ์˜ค์ง€ ์•Š๋Š”๊ฐ€? ๋ณ€์ˆ˜ v๊ฐ€ var๋กœ ์„ ์–ธ๋˜๊ธฐ๋„ ์ „์— ์ฝ˜์†”์ด ์›์‹œ๊ฐ’ undefined๋กœ ์ถœ๋ ฅ๋œ๋‹ค.
์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ˜ธ์ด์ŠคํŒ…์ด๋‹ค.
์„ ์–ธ๋ฌธ๋งŒ ์ฝ”๋“œ์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ๊ด€์ ์—์„œ ๋ณธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

var v; // ์ตœ์ƒ๋‹จ์—์„œ ์„ ์–ธ
console.log(v); // undefined
v = 5; //ํ• ๋‹น๋ฌธ์€ ๊ธฐ์กด ์œ„์น˜
console.log(v); // 5

์ฒซ๋ฒˆ์งธ ์ฝ˜์†”์— ์ฃผ๋ชฉํ•ด๋ณด์ž.
๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ undefined๋ผ๋Š” ์›์‹œ๊ฐ’์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Š” var๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜ v๊ฐ€ undefined๋กœ ์ดˆ๊ธฐํ™”๋˜์—ˆ์Œ์„ ์‹œ์‚ฌํ•œ๋‹ค.
๋‹ค๋ฅธ ์„ ์–ธ์ž๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์—์„œ๋„ ๋™์ผํ•œ ํ˜„์ƒ์ด ๋ฐœ์ƒํ• ๊นŒ?

console.log(l); // ReferenceError: l is not defined
let l = 5;
console.log(l); // 5

console.log(c); // ReferenceError: c is not defined
const c = 5;
console.log(c); // 5

var๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์™€ ๋‹ฌ๋ฆฌ let, const๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋“ค์€ ๊ฐ’์ด ํ• ๋‹น๋˜๊ธฐ ์ „์—๋Š” Reference Error๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฏ€๋กœ let,const๋Š” ํ˜ธ์ด์ŠคํŒ…์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์ผ๊นŒ? ๐Ÿ˜ฏ

ํ˜ธ์ด์ŠคํŒ…์€ var, let, const, function, class ์™€ ๊ฐ™์€ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ๋ชจ๋“  ์‹๋ณ„์ž์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.
๋ชจ๋“  ์„ ์–ธ๋ฌธ์€ ๋Ÿฐํƒ€์ž„ ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋จผ์ € ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด let, const๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋“ค์—์„œ๋Š” ์™œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?
์ด์— ๋Œ€ํ•œ ๋‹ต์€ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

Reference Error ์ฆ‰, ์ฐธ์กฐ ์—๋Ÿฌ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๋ณ€์ˆ˜ l, c์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ด๋ฅผ TDZ ์ƒํƒœ์— ๋น ์กŒ๋‹ค๊ณ  ํ•œ๋‹ค.

๐Ÿ“Œ TDZ(Temporary Dead Zone)

TDZ๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ๋ณ€์ˆ˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๊ณผ ๋งคํ•‘์€ ๋˜์ง€๋งŒ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•„ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ด๋‹ค. ์ •ํ™•ํžˆ๋Š” ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด๋‹ค.

var๊ณผ let,const์˜ ์ฐจ์ด๋ฅผ ์—ฌ๊ธฐ์„œ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค.
var์€ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ๋™์‹œ์— ๋ฐœ์ƒํ•ด ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์ „์—๋„ undefined๋กœ ์ดˆ๊ธฐํ™”๋˜์–ด์žˆ์ง€๋งŒ
let, const๋Š” ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ• ๋‹น ์ „์—๋Š” ์ดˆ๊ธฐํ™”๋˜์–ด์žˆ์ง€ ์•Š๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ๊ด€์ ์—์„œ ๋ณธ ์ฝ”๋“œ๋กœ ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค.

๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ป ๊ฐœ๋ฐœ์ž ๊ด€์  ์ฝ”๋“œ

console.log(foo);

let foo;
console.log(foo);

foo=1;
console.log(foo);

โš™๏ธ ์—”์ง„ ๊ด€์  ์ฝ”๋“œ

let foo; // ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ•ด ๋ณ€์ˆ˜ ์„ ์–ธ์ด ์ƒ๋‹จ์œผ๋กœ ์˜ฎ๊ฒจ์ง. ํ•˜์ง€๋งŒ ์ดˆ๊ธฐํ™”๋Š” ์—ฌ๊ธฐ์„œ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Œ.

console.log(foo); // TDZ๋กœ ์ธํ•ด ReferenceError ๋ฐœ์ƒ
// let foo; // ์‹ค์ œ ์ฝ”๋“œ ์ƒ์˜ ์œ„์น˜. ์—ฌ๊ธฐ์„œ ์ดˆ๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง (foo = undefined)

console.log(foo); // undefined. ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์— ๋„๋‹ฌํ•˜์—ฌ ์ดˆ๊ธฐํ™”๋œ ์ดํ›„, foo๋Š” undefined ๊ฐ’์„ ๊ฐ€์ง

foo = 1; // ํ• ๋‹น๋ฌธ์—์„œ foo ๋ณ€์ˆ˜์— 1์„ ํ• ๋‹น
console.log(foo); // 1. foo ๋ณ€์ˆ˜์— ๊ฐ’์ด ํ• ๋‹น๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ 1์„ ์ถœ๋ ฅ

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

const c; //SyntaxError : Missing initializer in const declaration

๐Ÿ’…๐Ÿป ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” JavaScript์˜ ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€ํ„ฐ ํ• ๋‹น๊นŒ์ง€์˜ ๊ณผ์ •๊ณผ ํ•จ๊ป˜ ํ˜ธ์ด์ŠคํŒ…๊ณผ TDZ(Temporary Dead Zone)์˜ ์ค‘์š” ๊ฐœ๋…์„ ์•Œ์•„๋ณด์•˜๋‹ค. var, let, const ๊ฐ๊ฐ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์„ธ๋ฐ€ํ•œ ์ฐจ์ด์ ๊ณผ ๊ทธ๋กœ ์ธํ•œ ์ดˆ๊ธฐํ™” ๋ฐ ํ• ๋‹น์˜ ํ–‰๋™ ์–‘์‹์„ ๋ถ„์„ํ–ˆ๋‹ค. โœจ ํŠนํžˆ, ํ˜ธ์ด์ŠคํŒ…์ด ๋ชจ๋“  ์„ ์–ธ์ž์—๊ฒŒ ๋ฐœ์ƒํ•˜๋ฉฐ, let๊ณผ const์˜ ๊ฒฝ์šฐ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์ฒ˜๋ฆฌ๋˜๋Š” ์ ์„ ์žŠ์ง€ ๋ง์ž ! โœจ

profile
https://sususoo.tistory.com/

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