๋ชจ๋ ํฌ์คํ
์ ์ธํ๋ฐ ECMAScript6: ๋น ๋ฅด๊ฒ ๋ฐฐ์ฐ๋ ES6 ์คํฌ๊ณผ ๋น๋๊ธฐ ํ๋ก๊ทธ๋จ ์ ๋ด์ฉ์ ๋ด๊ณ ์์ผ๋ฉฐ
์ถ์ฒ๋ ์๋์ ์ฃผ์๋ก "๊นํํ"๋์ ์๋ฃ์
๋๋ค.
์์
์ ์ธ ์๋๊ฐ ์๋ ๊ณต๋ถํ ๊ฒ์ ์ ๋ฆฌํด๋๋ ๋ชฉ์ ์ผ๋ก ํฌ์คํ
ํ ๊ฒ์
๋๋ค.
www.inflearn.com/course/es6-ecmascript-6
1. ECMA Script
#ECMAScript
- Core ์คํฌ๋ฆฝํธ ์ธ์ด
- ๊ฐ์ฒด ํ์
ํค์๋ ์ฐ์ฐ์ ๋ฑ ์ธ์ด์ ํต์ฌ์ด ๋๋ ๋ถ๋ถ์.
- ๋ธ๋ผ์ฐ์ ๋ฟ ์๋๋ผ node.js๋ฅผ ํตํด ์๋ฒ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ฌ์ฉ๋๋ค.
#JavaScript
- ECMAScript
- Document ObjectModel
- Brower Object Model
์ ์ธ๊ฐ์ง ์์๊ฐ Javascrip๊ฐ Brower์์ ์ฌ์ฉ๋ ๋ ํ์ํ ์์์ด๋ค.
#ECMS(European Computer Manufacturers Assciation) Script ํ์ค
Javascript์ ํธํ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๊ณ , ํ์ค ๊ท๊ฒฉ ํ์ํด์ก๋ค. ์ด ํ์ค ๊ท๊ฒฉ์ด ๋ฐ๋ก ECMS Script ํ์ค์ด๋ค.
์ต๊ทผ ์ฌ๋ฌ ๊ฐ๋ฐํ๊ฒฝ์์ ๋์
ํ๊ณ ์๋ TypeScript๋ ECMAํ์ค์ ๋ฐ๋ฅธ๋ค.
ํ์ดํ ํจ์, ์ดํฐ๋ ์ดํฐ, ์ ๋๋ ์ดํฐ, ํ๋ก๋ฏธ์ค, ํด๋์ค, ๋ชจ๋ ๋ฑ์ด ํฌํจ๋์ด ์ ์ฉํ ๊ธฐ๋ฅ ์ถ๊ฐ์ ๋ ๋์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ชจ์ต์ ๋ณด์ฌ์ฃผ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ES6์ ์ถ์๋ก ์ธ์ด์ ํ๊ณ๊ฐ ๊ฐ์ ๋์์ผ๋ฉฐ, ES6๋ ํ์ ํธํ์ฑ์ ์ง์ํ๋ค.
2. let & const
์ ๊ฐ๋
๋ค์ ์ดํดํ๊ธฐ์ ์์ Javascript์ scope, hoisting, excution context์ ๋ํด ์๊ณ ๊ฐ์.
#scope (์ ํจ๋ฒ์)
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ ํจ๋ฒ์๋ ์ด๋ ๋ฒ์๊น์ง ์ฐธ์กฐํ๋ ์ง๋ฅผ ๋ํ๋ธ๋ค.
์ฆ "๋ณ์์ ๋งค๊ฐ๋ณ์์ ์ ๊ทผ์ฑ๊ณผ ์์กด๊ธฐ๊ฐ์ ์๋ฏธํ๋ค."
lucete1230-cyberpolice.tistory.com/348
์ ์ฃผ์๋ฅผ ์ฐธ๊ณ ํ์ฌ scope์ ๊ฐ๋
์ ์ตํ๋๋ก ํ์.
์ ํจ๋ฒ์๋ ํฌ๊ฒ ๋ ๊ฐ์ง ์ข
๋ฅ๋ก ๋ถ๋ฆฌํ ์ ์๋ค.
1. ์ ์ญ ์ ํจ๋ฒ์ (Global Scope)
2. ์ง์ญ ์ ํจ๋ฒ์(Local Scope)
#hoisting
ํธ์ด์คํ
์ ํจ์ ์์ ์๋ ์ ์ธ๋ค์ ๋ชจ๋ ๋์ด์ฌ๋ ค์, ํด๋น ํจ์ ์ ํจ ๋ฒ์์ ์ต์๋จ์ ์ ์ธํ๋ ๊ฒ์ ๋งํ๋ค.
์ด๋, var ๋ณ์ ์ ์ธ๊ณผ ํจ์ ์ ์ธ๋ฌธ์์๋ง ์ผ์ด๋๋ฉฐ, ํ ๋น์ ํด๋น๋์ง ์๋๋ค.
gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html
์ ๋ธ๋ก๊ทธ ๋ด์ฉ์ ์ฐธ๊ณ ํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
#excution context
์ฝ๋๊ฐ ์คํ๋๊ณ ์๋ ๊ตฌ์ญ๊ณผ ๋ฒ์์.๋ํ ๊ฐ๋
์ผ๋ก ์ฝ๋๊ฐ ์คํ๋๋ฉด excution context ๋ด๋ถ์์ ์คํ์ด ๋๋ ๊ฒ์ด๋ค.
velog.io/@stampid/Execution-Context์คํ-์ปจํ
์คํธ๋
์ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๋ฏ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด let๊ณผ const๋ฅผ ์์๋ณด๋๋ก ํ์!
es5์์๋ ๋ณ์๋ ์์๋ฅผ ์ ์ธํ ๋ var ํค์๋๋ฅผ ํตํด ์ ์ธํ์๋ค.
es6์์๋ ์ด ๋์ ๊ตฌ๋ถํ๊ธฐ ์ํด let๊ณผ const๋ฅผ ์ฌ์ฉํ์๋ค.
์์ํ์์ ๋ณ์๋ let, ๋ณ๊ฒฝ๋์ง ์๋ ์์๋ const์ ์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
# let ๊ณผ const
- ES6ํ์ค์์ ์ฒ์์ผ๋ก ์ถ๊ฐ๋ ํน์ง
- ๋ณ์์ ์์ ๊ตฌ๋ถ์
- let ์ ์ธ๋ ๋ณ์๋ ๋ค์ ์ ์ธ ๋ถ๊ฐ
- const๋ ์ ์ธํ๋ฉด์ ์ด๊ธฐํ ํ์, ์ฌํ ๋น ๋ถ๊ฐ๋ฅ.
๋ ์ ์ธ์๋ ์ด๋ฏธ ์ ์ธ๋์๋ค๋ฉด ๋ค์ ์ ์ธํ ์ ์๊ณ , ๊ตฌ๋ฌธ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.const๋ณ์๊ฐ ์ฐธ์กฐํ์ธ ๊ฒฝ์ฐ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
3. Block-scope
- Block-scope : {} ๋ก ๊ฐ์ธ์ง ์ ํจ๋ฒ์
- ๊ธฐ์กด์ var๋ function scope ๋ ๋ฒจ hoisting
- let ํค์๋๋ฅผ ์ฌ์ฉํด ๋ณ์์ ์ ํจ๋ฒ์๋ฅผ ๋ธ๋ก ์ค์ฝํ ์ฒ๋ฆฌํ ์ ์๋ค.
let์ ์ธ์๋ฅผ ์ฌ์ฉํ๋ ์์๋ฅผ ๋ค์ด๋ณด์๋ฉด:
์ ์ฝ๋์ฒ๋ผ ์ง์ญ ์ค์ฝํ์ ์ ์ธ๋ product๊ฐ ํธ์ด์คํ
๋์ด, ์ ์ญ ์ค์ฝํ์ ์ ์ธ๋ product ๊ฐ์ ๋ฐ๊ฟ ๋ฒ๋ฆฌ๋ ํ์์ด ๋ฐ์ํ๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด let ์ ์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋ก ์ค์ฝํ์ ์ ์ญ ์ค์ฝํ๋ก ๋ ๋ณ์๊ฐ ๋ถ๋ฆฌ๊ฐ ๋ ์ ์๋ค.
4. Temporal Dead Zone
- let, const๋ TDZ์ ์ํด ์ ์ฝ๋๋ค.
let์ var์ ๋ฌ๋ฆฌ ๋ณ์๊ฐ ์ด๊ธฐํ ๋๊ธฐ ์ ์ ์ ๊ทผํ๋ฉด ์ฐธ์กฐ์๋ฌ(reference error)๊ฐ ๋ฐ์ํ๋ค.
var๋ ์ ์ธ๋์์ ์ด๊ธฐํ ๋์ง๋ง, let์ ๋จผ์ ๋ณ์๊ฐ ์ค์ฝํ์ ์ ์ธ๋์ง๋ง, ์ด๊ธฐํ๊ฐ ํ๋ฒ์ ์ด๋ฃจ์ด์ง์ง ์๊ณ ์ ์ธ๋ฌธ์ ๋๋ฌํด์ผ ์ด๋ฃจ์ด ์ง๋ค.
์ด์ฒ๋ผ let์ผ๋ก ์ ์ธ๋ ๋ณ์๊ฐ ์ด๊ธฐํ ๋๊ธฐ ์ ์ ์์ธ์ค ํ ์ ์๋ ๊ตฌ์ญ์ "TDZ(temporal dead zone)"๋ผ๊ณ ํ๋ค.
5. ์ ๋ฆฌํ๊ธฐ
- let์ ๋ณ์์ ์ ํจ๋ฒ์๊ฐ ๋ธ๋ก์ค์ฝํ
- ์์ํ ๋ณ์๋ let, ์์๋ const
- ์ฐธ์กฐํ์ const