210807 ๊ฐœ๋ฐœ๊ธฐ๋ก: var, let ์˜ ์ฐจ์ด(feat. ํ˜ธ์ด์ŠคํŒ…)

2021. 8. 8. 01:15ใ†๐Ÿ“” TIL

 

๋ณธ ํฌ์ŠคํŒ…์€ ์•„๋ž˜์˜ ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์„ ํ•จ์–‘ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ™‹๐Ÿป‍โ™‚๏ธ Q.  var ๊ณผ let ์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€?

๐Ÿ˜ถ A.

์Šค์ฝ”ํ”„์˜ ๊ด€์ ์—์„œ, var๋Š” ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„, let์€ ๋ธ”๋Ÿญ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋‹ค.

 

์žฌ์„ ์–ธ์˜ ๊ด€์ ์—์„œ, var ๋Š” ์ด๋ฏธ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ฅผ ์žฌ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, let์€ ์žฌ์„ ์–ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. let์€ ์žฌํ• ๋‹น๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค (์„ ์–ธ๊ณผ ํ• ๋‹น์˜ ์˜๋ฏธ๋ฅผ  ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜์ž!)

 

๐Ÿ™‹๐Ÿป‍โ™‚๏ธ Q.  var ๊ณผ let ์˜ ๋ณ€์ˆ˜ ์ƒ์„ฑ ๊ณผ์ •์—” ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๊ฐ€

๐Ÿ˜ถ A.

๋ณ€์ˆ˜ ์ƒ์„ฑ ๊ณผ์ •์—๋„ var / let ์€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

์šฐ์„  ๋ณ€์ˆ˜๋Š” ์„ ์–ธ -> ์ดˆ๊ธฐํ™” -> ํ• ๋‹น ์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ ์ƒ์„ฑ๋˜๋Š”๋ฐ, 

var ์€ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™” ๊ณผ์ •์ด ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€๊ณ , let์€ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™” ๊ณผ์ •์ด ๋ถ„๋ฆฌ๋˜์–ด์žˆ๋‹ค.

 

์—ฌ๊ธฐ์— ํ˜ธ์ด์ŠคํŒ… (hoisting) ๊ฐœ๋…์„ ๊ณ๋“ค์—ฌ ๋ณด์ž. 

 

๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ ๋ณด๋‹ค ๋จผ์ € ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋„(console.log(foo))) ์ฐธ์กฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ undefined ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค( โžก๏ธ undefined ๋Š” ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ์ •์˜๋œ๋‹ค).

ํ•ด๋‹น ์Šค์ฝ”ํ”„์—์„œ var ๋กœ ์„ ์–ธ๋œ foo ๊ฐ€ ํ˜ธ์ด์ŠคํŒ…๋˜์–ด, ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ณ€์ˆ˜๊ฐ€ ํ• ๋‹น ๋‹จ๊ณ„์— ๋„๋‹ฌํ•˜๋ฉด ๋น„๋กœ์†Œ ํ• ๋‹น๋ฐ›์€ ๊ฐ’์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. 

console.log(foo);  // undefined
var foo;
foo = 1;
console.log(foo);  // 1

์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” var

 

 

๋ฐ˜๋ฉด let ์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜ foo ๋Š” ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•ด๋„, ์„ ์–ธ ๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ์— ์ฐธ์กฐํ•  ๋ณ€์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— (foo ๋ณ€์ˆ˜๊ฐ€ ์•„์ง ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•จ)  ReferenceError ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

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

๋˜ํ•œ ์ฝ”๋“œ๋ผ์ธ 1์—์„œ, ๋ณ€์ˆ˜ foo ๋Š” ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€(TDZ) ์— ์†ํ•˜๋Š”๋ฐ, ์•„์ง ์„ ์–ธ๋„, ์ดˆ๊ธฐํ™”๋„ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๊ฐ€ ๋ถ„๋ฆฌ๋œ let

 

 

 

๐Ÿ™‹๐Ÿป‍โ™‚๏ธ Q. ๊ทธ๋ ‡๋‹ค๋ฉด var ๊ณผ let ์˜ ๊ณตํ†ต์ ์€ ๋ฌด์—‡์ธ๊ฐ€?

๐Ÿ˜ถ A. 

var / let ์€ ๋ณ€์ˆ˜ ์„ ์–ธ์‹œ ์ดˆ๊ธฐ๊ฐ’์„ ์ฃผ์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค. (๋ฐ˜๋ฉด const ๋Š” ๋ฌด์กฐ๊ฑด ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค)