๐Ÿ’ก ๋ณ€์ˆ˜์˜ ์ƒ์„ฑ ๋‹จ๊ณ„

1. ์„ ์–ธ๋‹จ๊ณ„(Declaration phase)

     ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ๋ณ€์ˆ˜๋ฅผ ๋“ฑ๋กํ•œ๋‹ค. ์ด ๋ณ€์ˆ˜ ๊ฐ์ฒด๋Š” ์Šค์ฝ”ํ”„๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋Œ€์ƒ์ด ๋œ๋‹ค.

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

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

3. ํ• ๋‹น ๋‹จ๊ณ„( Assignment phase)

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

๐Ÿ’ก var์˜ ๋ฌธ์ œ์ 

1. ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„(Function-level scope)

   - ์ „์—ญ ๋ณ€์ˆ˜ ๋‚จ๋ฐœ

   - for๋ฌธ ์ดˆ๊ธฐํ™”์‹์—์„œ ์‚ฌ์šฉํ•œ ๋ณ€์ˆ˜๋ฅผ ์™ธ๋ถ€์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

2. var ํ‚ค์›Œ๋“œ ์ƒ๋žต ํ—ˆ์šฉ

    - ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ์ „์—ญํ™”

3. ์ค‘๋ณต ์„ ์–ธ ํ—ˆ์šฉ

   - ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๊ฐ’ ๋ณ€๊ฒฝ

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

   - ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์— ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

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

- ํ˜ธ์ด์ŠคํŒ…์€ var , let , const, function ๋“ฑ ๋ชจ๋“  ์„ ์–ธ์„ ์œ ํšจ๋ฒ”์œ„(scope)์— ๋”ฐ๋ผ ๊ฐ€์žฅ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

- ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์ดˆ๊ธฐํ™” ๋œ ๊ฐ’์€ ์ œ์™ธํ•˜๊ณ  ์„ ์–ธ๋งŒ ๋Œ์–ด ์˜ฌ๋ฆฐ๋‹ค.

- ์„ ์–ธ๊ณผ ํ• ๋‹น์˜ ๋ถ„๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.

- ์œ ํšจ๋ฒ”์œ„์—๋Š” 'ํ•จ์ˆ˜๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„'์™€ '๋ธ”๋Ÿญ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„'๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

- var๋Š” ํ•จ์ˆ˜๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„์ด๊ณ  let,const๋Š” ๋ธ”๋Ÿญ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„์ด๋‹ค. 

- var๋Š” ์ดˆ๊ธฐ ๊ฐ’์ด ์—†๋‹ค๋ฉด ์„ ์–ธ์™€ ๋™์‹œ์— undefined๋กœ ์ดˆ๊ธฐํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ ์–ธ ์ „์—๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ’ก var , let , const ๋น„๊ต

  var let const
์žฌ์„ ์–ธ๊ฐ€๋Šฅ์—ฌ๋ถ€ ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ
์Šค์ฝ”ํ”„ ํ•จ์ˆ˜๋ ˆ๋ฒจ ๋ธ”๋Ÿญ๋ ˆ๋ฒจ ๋ธ”๋Ÿญ๋ ˆ๋ฒจ
์ดˆ๊ธฐ๊ฐ’ ์„ ํƒ ์„ ํƒ ํ•„์ˆ˜
๊ฐ’ ์žฌํ• ๋‹น ์—ฌ๋ถ€  ๊ฐ€๋Šฅ ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ
์„ ์–ธ ์ „ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ

 

๐Ÿ’™ const ์™€ let  ๊ฐ’ ๋ณ€๊ฒฝ ์—ฌ๋ถ€์—์„œ ํ—ท๊ฐˆ๋ฆด์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ์ฒจ์–ธํ•ด๋ณด์ž๋ฉด (๋‚˜๋„ ํ—ท๊ฐˆ๋ ธ๋‹ค.)

      ์—ฌ๊ธฐ์„œ ๋ณ€๊ฒฝ์€ ๊ฐ’์˜ ๋ณ€๊ฒฝ์ด ์•„๋‹ˆ๋ผ '๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ'์˜ ๋ณ€๊ฒฝ์ด๋‹ค.

       let ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅ ํ•˜๊ณ  const ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

let Arr = [];
Arr.push(1);
Arr.push(2);
Arr.push(3);

//	Arr ๋ฐฐ์—ด์•ˆ์—์„œ ๊ฐ’์ด ์ถ”๊ฐ€๋˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.
//	๊ทธ๋ž˜์„œ const๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.

const Arr = [];
Arr.push(1);
Arr.push(2);
Arr.push(3);

๐Ÿ’ก ์˜ˆ์‹œ 

console.log(num);		// undefined
var num;

 

์ฐธ๊ณ 

poiemaweb.com/es6-block-scope

 

let, const | PoiemaWeb

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

poiemaweb.com

 

+ Recent posts