๊ด€๋ฆฌ ๋ฉ”๋‰ด

bom's happy life

[JS] `var` ๊ณผ `let`์˜ ์ฐจ์ด์ ? + ํ˜ธ์ด์ŠคํŒ…(Hoisting)์ด๋ž€? ๋ณธ๋ฌธ

Deveolpment Study๐Ÿ—‚๏ธ/Javascript

[JS] `var` ๊ณผ `let`์˜ ์ฐจ์ด์ ? + ํ˜ธ์ด์ŠคํŒ…(Hoisting)์ด๋ž€?

bompeach 2023. 6. 1. 14:05

`var` ๊ณผ `let`  ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.

์ด ๋‘ ํ‚ค์›Œ๋“œ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

 

1. ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„ : 

  - `var` : ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ฆ‰, ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธ๋˜๋ฉด ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๋‹ค.

  - `let` : ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ฆ‰, ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ๋ธ”๋ก ๋‚ด์—์„œ ์„ ์–ธ๋˜๋ฉด ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๋‹ค.

 

2. ๋ณ€์ˆ˜์˜ ํ˜ธ์ด์ŠคํŒ… : 

- `var` : ๋ณ€์ˆ˜ ์„ ์–ธ์€ ํ˜ธ์ด์ŠคํŒ…๋˜์–ด ํ˜„์žฌ ์Šค์ฝ”ํ”„์˜ ๋งจ ์œ„๋กœ ์ด๋™ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์„ ์–ธํ•˜๊ธฐ ์ „์— ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‹จ, ๊ฐ’์ด ํ• ๋‹น๋˜๊ธฐ ์ „์— ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด `undefined` ๊ฐ€ ๋œ๋‹ค.

  - `let` : ๋ณ€์ˆ˜ ์„ ์–ธ๋„ ํ˜ธ์ด์ŠคํŒ…๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ธ”๋ก ๋‚ด์—์„œ ์‹ค์ œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋ณ€์ˆ˜ ์„ ์–ธ ์ด์ „์— ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

3. ์ค‘๋ณต ์„ ์–ธ : 

- `var` : ๊ฐ™์€ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ ์ค‘๋ณต๋œ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‚˜์ค‘์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๊ฐ€ ์ด์ „ ๋ณ€์ˆ˜๋ฅผ ๋ฎ์–ด์“ด๋‹ค.

  - `let` : ๊ฐ™์€ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ ์ค‘๋ณต๋œ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋ฅผ ์žฌ์„ ์–ธํ•  ์ˆ˜ ์—†๋‹ค. ์ค‘๋ณต ์„ ์–ธ ์‹œ ๋ฌธ๋ฒ• ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

4. ์ „์—ญ ๊ฐ์ฒด์™€์˜ ์—ฐ๊ฒฐ : 

- `var` : `var` ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๊ฐ์ฒด(window ๊ฐ์ฒด)์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๋“ฑ๋ก๋œ๋‹ค. ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ „์—ญ ์Šค์ฝ”ํ”„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, `window` ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

  - `let` :  `let` ์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๋“ฑ๋ก๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์ „์—ญ ์Šค์ฝ”ํ”„์—์„œ ์„ ์–ธ๋œ `let` ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๊ฐ์ฒด์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ฉฐ, `window` ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ `let` ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค. `let`์€ ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ , ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ , ์ค‘๋ณต ์„ ์–ธ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” `var`์˜ ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

 

 


 

ํ˜ธ์ด์ŠคํŒ…(Hoisting)์ด๋ž€?

 

ํ˜ธ์ด์ŠคํŒ…(Hoisting)์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜ ์„ ์–ธ์„ ํ•ด๋‹น ์Šค์ฝ”ํ”„์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๋™์ž‘ ์„ ๋งํ•œ๋‹ค. ์ฆ‰, ์ฝ”๋“œ ๋‚ด์—์„œ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์—๋„ ํ•ด๋‹น ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

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

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด

console.log(x);
var x = 10;

์‹ค์ œ๋กœ๋Š” ๋ณ€์ˆ˜ x ๊ฐ€ ์„ ์–ธ๋˜๊ธฐ ์ „์— console.log(x) ๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์œผ๋ฏ€๋กœ  undefined ๊ฐ€ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์ธํ•ด x ๋Š” ์Šค์ฝ”ํ”„ ๋งจ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๊ณ  ๋ณ€์ˆ˜ ์„ ์–ธ์€ ์‹คํ–‰๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

var x;
console.log(x); // undefined
x = 10;

 

.

.

 

ํ•จ์ˆ˜ ์„ ์–ธ๋„ ํ˜ธ์ด์ŠคํŒ…์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค. ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ์ „์ฒด ์Šค์ฝ”ํ”„์—์„œ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๋ฏ€๋กœ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์— ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

sayHello(); // "Hello"

function sayHello() {
  console.log("Hello");
}

์œ„์˜ ์ฝ”๋“œ์—์„œ๋„ sayHello( ) ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜์—ˆ์ง€๋งŒ, ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ•ด ์Šค์ฝ”ํ”„ ๋งจ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๋ฏ€๋กœ ์ •์ƒ์ ์œผ๋กœ Hello ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์˜ ํ• ๋‹น ๋˜๋Š” ์ดˆ๊ธฐํ™”๋Š” ํ˜ธ์ด์ŠคํŒ…๋˜์ง€ ์•Š์œผ๋ฉฐ, ์‹ค์ œ ์ฝ”๋“œ์˜ ์œ„์น˜์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. ํ˜ธ์ด์ŠคํŒ…์€ ์„ ์–ธ๋ถ€๋งŒ ํ•ด๋‹น ์Šค์ฝ”ํ”„์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ ํ•œ๋‹ค.