CS ๊ณต๋ถ€ - front

[JS]๋ณ€์ˆ˜ ์„ ์–ธ์˜ ์‹คํ–‰ ์‹œ์ ๊ณผ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

Nuri-KSLV-II 2023. 1. 31. 21:59

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

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

 

์˜ˆ์‹œ

console.log(score); // undefined
var score; // ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ

- ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ํ•ด ํ•œ ์ค„ ์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค๋ฉด, ์•„์ง ์„ ์–ธ๋˜์ง€ ์•Š์€  socre๋ณ€์ˆ˜๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ReferenceError(์ฐธ์กฐ์—๋Ÿฌ)๊ฐ€ ๋– ์•ผํ•จ

- ํ•˜์ง€๋งŒ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  undefined๊ฐ€ ์ถœ๋ ฅ๋จ

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ์— ์•ž์„œ, ๋จผ์ € ์†Œ์Šค์ฝ”๋“œ์˜ ํ‰๊ฐ€ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด์„œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ค€๋น„๋ฅผ ํ•จ

- ์†Œ์Šค์ฝ”๋“œ ํ‰๊ฐ€ ๊ณผ์ •์—์„œ ๋ณ€์ˆ˜ ์„ ์–ธ์„ ํฌํ•จํ•œ ๋ชจ๋“  ์„ ์–ธ๋ฌธ์„ ์†Œ์Šค์ฝ”๋“œ์—์„œ ์ฐพ์•„์„œ ๋จผ์ € ์‹คํ–‰

- var, let, const, function, function*, class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„ ์–ธํ•˜๋Š” ๋ชจ๋“  ์‹๋ณ„์ž(๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค)๋“ฑ์€ ํ˜ธ์ด์ŠคํŒ…๋จ

- const, let์€ var์˜ ํ˜ธ์ด์ŠคํŒ…๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋ฉฐ, TDZ(Temporal Dead Zone) ์ด๋ผ๋Š” ํ˜„์ƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

๐Ÿ“Œ ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๋Š” 3๋‹จ๊ณ„

1. ์„ ์–ธ ๋‹จ๊ณ„

  • ๋ณ€์ˆ˜๋ฅผ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ๋“ฑ๋ก

 

2. ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„

  • ๋ณ€์ˆ˜ ๊ฐ์ฒด ๋“ฑ๋ก๋œ ๋ณ€์ˆ˜๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์„ ๋ฉ”๋ชจ๋ฆฌ์— ํ™•๋ณด. ์ด ๋‹จ๊ณ„์—์„œ ๋ณ€์ˆ˜๋Š” undefined๋กœ ์ดˆ๊ธฐํ™”

 

3. ํ• ๋‹น ๋‹จ๊ณ„

  • undefied๋กœ ์ดˆ๊ธฐํ™”๋œ ๋ณ€์ˆ˜์— ์‹ค์ œ ๊ฐ’์„ ํ• ๋‹น

 

* ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€(let, const์˜ ํ˜ธ์ด์ŠคํŒ…๊ณผ ์—ฐ๊ด€)

์„ ์–ธ ๋‹จ๊ณ„
์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€(TDZ)
์ดˆ๊ธฐํ™” ๋‹จ๊ณ„
ํ• ๋‹น ๋‹จ๊ณ„

 

๐Ÿ“Œ let์—์„œ์˜ ํ˜ธ์ด์ŠคํŒ…

console.log(foo);
let foo;
//foo is not defined

- ์„ ์–ธ๋‹จ๊ณ„์—์„œ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„ ์ด์ „๊นŒ์ง€ ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€๊ฐ€ ์žˆ์–ด์„œ, ์ดˆ๊ธฐํ™” ์ด์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ฐธ์กฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ.

- ๋”ฐ๋ผ์„œ, const,let ์€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋˜ ํ˜„์ƒ์„ ์ฐจ๋‹จํ•ด์„œ ํ˜ธ์ด์ŠคํŒ…์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

- ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ 

let foo = 1; //์ „์—ญ ๋ณ€์ˆ˜
{
  console.log(foo); // ReferenceError: foo is not defined
  let foo = 2; //์ง€์—ญ ๋ณ€์ˆ˜
}

- ํ˜ธ์ด์ŠคํŒ…์ด ์ •๋ง ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ „์—ญ ๋ณ€์ˆ˜ foo ๊ฐ’์ด ์ถœ๋ ฅ๋  ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ž„. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ํ˜ธ์ด์ŠคํŒ…์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ ์—๋Ÿฌ ๋ฐœ์ƒ

- let์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„์ด๋ฏ€๋กœ, ์ง€์—ญ ๋ณ€์ˆ˜ foo๊ฐ€ ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€์— ๋น ์ง. ๋”ฐ๋ผ์„œ ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€ ํ˜•ํƒœ๋กœ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ.

 

์ฐธ๊ณ 

1. ์ด์›…๋ชจ, ๋ชจ๋˜ ์ž์Šค ๋”ฅ๋‹ค์ด๋ธŒ

2. poiemaweb, let const์™€ ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

https://poiemaweb.com/es6-block-scope

 

let, const | PoiemaWeb

ES5๊นŒ์ง€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค. ์ด๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€๋Š” ๋‹ค๋ฅธ ํŠน์ง•์œผ๋กœ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์ง€ ์•Š์œผ๋ฉด

poiemaweb.com

2. ์ œ๋กœ์ดˆ, const let

https://www.zerocho.com/category/ECMAScript/post/5757d74345041aaae7493479

 

https://www.zerocho.com/category/ECMAScript/post/5757d74345041aaae7493479

 

www.zerocho.com