๐ ๋ณธ ํฌ์คํธ๋ '๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive' ๋์๋ฅผ ๋ฐํ์ผ๋ก ํต์ฌ ๊ฐ๋ ๋ฐ ๋ด์ฉ์ ์์ฝํ ํฌ์คํธ์ ๋๋ค.
04์ฅ ๋ณ์
4.1 ๋ณ์๋ ๋ฌด์์ด๋ฉฐ ์ ํ์ํ ๊น?
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃน๋๋ค. ์๋ฌด๋ฆฌ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ ๊ฒฐ๊ตญ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ ๋ฐ์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ด ์ ๋ถ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
๋ณ์๋ ์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํต์ฌ ๊ฐ๋ ์ด๋ฏ๋ก ๋ณ์๊ฐ ๋ฌด์์ด๊ณ ์ ํ์ํ์ง ์ดํดํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์๋์ ๊ฐ์ ์๋ฐ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ปดํจํฐ์์๋ ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น์?
10 + 20
์ปดํจํฐ(ํด๋น ๊ฒฝ์ฐ์์๋ JS ์์ง)๊ฐ ์ ์์ ํ๊ฐํ๊ธฐ ์ํด์๋ 10, 20, +๋ผ๋ ๋ฆฌํฐ๋ด๊ณผ ์ฐ์ฐ์๊ฐ ๊ฐ์ง ์๋ฏธ๋ฅผ ์๊ณ ์์ด์ผ ํ๋ฉฐ 10 + 20 ์ด๋ผ๋ ํํ์์ ์๋ฏธ๋ ํ์ฑํ ์ ์์ด์ผ ํฉ๋๋ค.
JS ์์ง์ด ํํ์ 10 + 20์ ํ์ฑํ๋ฉด ์๋์ ๊ฐ์ ์์๋ก ๋์ํ๊ฒ ๋ฉ๋๋ค.
- + ์ฐ์ฐ์ ์ํํ๊ธฐ ์ํ์ฌ ํ์ํ ํผ์ฐ์ฐ์(์ข๋ณ๊ณผ ์ฐ๋ณ์ ๊ฐ)์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํฉ๋๋ค.
- CPU๊ฐ ํผ์ฐ์ฐ์์ ๊ฐ์ ์ฝ์ด๋ค์ฌ ์ฐ์ฐ์ ์ํํฉ๋๋ค
- ์ฐ์ฐ ๊ฒฐ๊ณผ๋ก ์์ฑ๋ ์ซ์ 30์ ์์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ์ CPU๋ง ์์ด๋ ์ฐ์ฐ์ ์ฑ๊ณต์ ์ผ๋ก ์ํํ ์ ์๊ณ ๊ฒฐ๊ณผ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ ์ ์์ง๋ง CPU๊ฐ ์ฐ์ฐํด์ ๋ง๋ ๊ฒฐ๊ณผ๊ฐ 30์ ์ฌ์ฌ์ฉํ ์ ์๋ค๋ ๋ฌธ์ ์ ์ด ์์ต๋๋ค.
์์์ 10 + 20์ด๋ผ๋ ์ฐ์ฐ์ ํ๋ค๋ ๊ฒ์ ํด๋น ๊ฒฐ๊ณผ๊ฐ์ธ 30์ ์ด๋๊ฐ์ ์ฌ์ฉํ๊ธฐ ์ํด์์ผํ ๋ฐ ํด๋น ๊ฐ์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ง์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ ์ด์ธ์๋ 30์ด๋ผ๋ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๋ํ, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํตํ์ฌ ๊ฐ์ ์ง์ ์ ๊ทผํ๋ ๊ฒ์ ์น๋ช ์ ์ธ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ด ์์ด ๊ถ์ฅ๋์ง ์๋ ๋ฐฉ์์ด๊ธฐ๋ ํ์ฌ JS์์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ์ด๋ฅผ ํ๋ ๊ฒ์ ํ์ฉํ์ง ์์ต๋๋ค.
๋ง์ผ JS์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ํ์ฉํ์ฌ๋ ๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๋ฏธ๋ฆฌ ์ ํด์ง๋ ๊ฒ์ด ์๋ ์ฝ๋ ์คํ ๋น์ ๋ฉ๋ชจ๋ฆฌ์ ์ํฉ์ ๋ฐ๋ผ ์์์ ์ผ๋ก ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์คํ๋ง๋ค ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. --> ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํตํ ๊ฐ ์ ๊ทผ์ ์ฌ๋ฐ๋ฅธ ์๋๊ฐ ์๋๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๊ธฐ์ตํ๊ณ ์ ํ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ , ์ ์ฅ๋ ๊ฐ์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ์ฌ ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ณ์์ ์ ์๋ ํ๋์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ํ๋ณดํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์์ฒด ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ณํ๊ธฐ ์ํด ๋ถ์ธ ์ด๋ฆ ์ ๋๋ค.
์ฆ, ๋ณ์๋ ๊ฐ์ ์ ์ฅํ๊ณ ์ฐธ์กฐํ๋ ๋ฉ์ปค๋์ฆ์ผ๋ก ๊ฐ์ ์์น๋ฅผ ๋ํ๋ด๋ ์์ง์ ์ธ ์ด๋ฆ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ณ์๋ ์ปดํ์ผ๋ฌ๋ ์ธํฐํ๋ฆฌํฐ์ ์ํ์ฌ ๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์๋ก ์นํ๋์ด ์คํ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํตํ์ฌ ๊ฐ์ ์ ์ฅํ๊ณ ์ฐธ์กฐํ ํ์ ์์ด ์์ ํ๊ฒ ๋ณ์๋ฅผ ํตํ์ฌ ๋ชจ๋ ๊ฒ์ ์ ์ดํ ์ ์์ต๋๋ค.
let result = 10 + 20;
console.log(result);
๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฒ๋ผ ํํ์ 10 + 20์ ํ๊ฐํ ๊ฒฐ๊ณผ์ธ 30์ result๋ผ๋ ๋ณ์๋ฅผ ํตํ์ฌ ์ ์ฅํ๊ณ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
๋ณ์์ ๊ด๋ จ๋ ์ฉ์ด์ ์ ์๋ ์๋์ ๊ฐ์ต๋๋ค.
๋ณ์ ์ด๋ฆ(๋ณ์๋ช ) - ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋ ๊ฐ์ ์๋ณํ ์ ์๋ ๊ณ ์ ํ ์ด๋ฆ
๋ณ์ ๊ฐ - ๋ณ์์ ์ ์ฅ๋ ๊ฐ
ํ ๋น - ๋ณ์์ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ
์ฐธ์กฐ - ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ์ฝ์ด ๋ค์ด๋ ๊ฒ
4.2 ์๋ณ์
๋ณ์๋ช ์ ๋ค๋ฅธ ์๋ฏธ๋ก๋ ์๋ณ์๋ผ๊ณ ๋ ํฉ๋๋ค. ์๋ณ์๋ ์ด๋ค ๊ฐ์ ๊ตฌ๋ณํด์ ์๋ณํ ์ ์๋ ๊ณ ์ ํ ์ด๋ฆ์ ๋ปํฉ๋๋ค.
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ์๋ ์ด๋ค ๊ฐ์ ๊ตฌ๋ณํ์ฌ ์๋ณํ๊ธฐ ์ํ์ฌ '๋ฉ๋ชจ๋ฆฌ ์ฃผ์'์ ๋งคํ๋ฉ๋๋ค(๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ๊ฐ์ ์๋ณํ๊ธฐ ์ํด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ).
์ฌ๊ธฐ์ ์ฃผ๋ชฉํด์ผ ํ ์ฌ์ค์ ์๋ณ์๋ ํน์ ๊ฐ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์๋ ํด๋น ๊ฐ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ธฐ์ตํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ณ์๋ก ๊ฐ์ ๊ตฌ๋ณํ์ฌ ์๋ณํ๋ค๋ ๊ฒ์ ์๋ณ์๊ฐ ๊ธฐ์ตํ๋ ์ฃผ์๋ฅผ ํตํ์ฌ ์ ๊ทผํ์ฌ ํด๋น ๊ฐ์ ๋๋ฌํ ์ ์์์ ๋ํ๋ ๋๋ค.
์ฆ, 30์ด๋ผ๋ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 0x0669F913์ ์ ์ฅ๋์ด ์๋ค๋ฉด ๊ด๋ จ ๋ณ์๋ช result๋ 30 ์ชฝ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(0x0669F913)์ ๋ถ์ธ ์ด๋ฆ์ ๋๋ค.
์๋ณ์๋ผ๋ ์ฉ์ด๋ ๋ณ์์์๋ง ์ฌ์ฉ๋๋ ๊ฒ์ด ์๋๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ์ ์กด์ฌํ๋ ์ด๋ค ๊ฐ์ ์๋ณํ ์ ์๋ ์ด๋ฆ์ ๋ชจ๋ ์๋ณ์๋ผ๊ณ ๋ถ๋ฆ ๋๋ค(๋ณ์, ํด๋์ค, ํจ์ ๋ฑ). ๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ์ด๋ฆ๊ณผ ๊ฐ์ ์๋ณ์๋ ๋ค์ด๋ฐ ๊ท์น์ ์ค์ํด์ผ ํ๋ฉฐ ์ ์ธ์ ํตํ์ฌ JS ์์ง์ ์๋ณ์์ ์กด์ฌ๋ฅผ ์๋ฆด ์ ์์ต๋๋ค.
4.3 ๋ณ์ ์ ์ธ
๋ณ์ ์ ์ธ์ ๋ณ์๋ฅผ ์์ฑํ๋ ๊ฒ, ๋ ์์ธํ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ๋ณด, ๋ณ์ ์ด๋ฆ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐ๊ฒฐํ์ฌ ๊ฐ ์ ์ฅ์ ์ํ ์ค๋น๋ฅผ ํ๋ ๊ฒ์ ๋๋ค. ๋ณ์ ์ ์ธ์ ํตํ์ฌ ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํด์ ๋๊ธฐ ์ ๊น์ง ๋๊ตฌ๋ ํด๋น ๊ณต๊ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ณดํธ๋๊ธฐ ๋๋ฌธ์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์ ์ธ์ด ๋จผ์ ํ์ํฉ๋๋ค. ๋ณ์ ์ ์ธ์๋ var, let, const์ ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ ES6์์ let๊ณผ const๊ฐ ๋์ ๋๊ธฐ ์ ๊น์ง๋ ๋ชจ๋ var๋ฅผ ํตํ์ฌ ๋ณ์๋ฅผ ์ ์ธํ ์ ์์์ต๋๋ค.
var ํค์๋๋ ์ฌ๋ฌ ๋ฌธ์ ์ (๋ํ์ ์ผ๋ก ํจ์ ๋ ๋ฒจ ์ค์ฝํ)์ด ์์ด let, const ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๊ณ ์์ต๋๋ค.
์๋ ์ฝ๋๋ฅผ ํตํ์ฌ ๋ณ์ ์ ์ธ ๊ณผ์ ์ ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
var score;
์ ์ ์ธ๋ฌธ์ ๋ณ์ ์ด๋ฆ์ ๋ฑ๋กํ๊ณ ๊ฐ์ ์ ์ฅํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํฉ๋๋ค(ํธ์์ 1000์ด๋ผ๊ณ ํ๊ฒ ์ต๋๋ค).
๋ณ์ ์ ์ธ ์ดํ, ๊ฐ์ ํ ๋นํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ณ์ ์ ์ธ์ ์ํ์ฌ ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋น์ด์์ ๊ฒ ๊ฐ์ง๋ง JS ์์ง์ ์ํ์ฌ 1000๋ฒ ์ฃผ์์๋ undefined๋ผ๋ ๊ฐ์ด ์๋ฌต์ ์ผ๋ก ํ ๋น๋์ด ์ด๊ธฐํ ๋ฉ๋๋ค(์ด๋ JS์ ํน์ง์ ๋๋ค).
JS ์์ง์ ๋ณ์ ์ ์ธ์ ๋ค์๊ณผ ๊ฐ์ 2๋จ๊ณ์ ๊ฑฐ์ณ ์ํํฉ๋๋ค.
1. ์ ์ธ ๋จ๊ณ - ๋ณ์ ์ด๋ฆ์ ๋ฑ๋กํ์ฌ JS ์์ง์ ๋ณ์(์๋ณ์)์ ์กด์ฌ๋ฅผ ์๋ฆฝ๋๋ค.
2. ์ด๊ธฐํ ๋จ๊ณ - ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ์๋ฌต์ ์ผ๋ก undefined๋ฅผ ํ ๋นํ์ฌ ์ด๊ธฐํํฉ๋๋ค.
var ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ ๋ณ์๋ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋์์ ์งํ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๊ธฐํ๋ ๋ณ์ ํ ๋น ์ดํ ์ต์ด๋ก ๊ฐ์ ํ ๋นํ๋ ๊ฒ์ ์๋ฏธํ๋๋ฐ var ํค์๋๋ ์๋ฌต์ ์ผ๋ก undefined๋ผ๋ ๊ฐ์ ํ ๋นํ์ฌ ์ด๊ธฐํํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์์ garbage value๊ฐ ๋์ค๋ ์ํ์ผ๋ก๋ถํฐ ์์ ํ๋ค๋ ์ฅ์ ๋ ์์ต๋๋ค.
๋ณ์๋ฅผ ํฌํจํ ๋ชจ๋ ์๋ณ์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ ์ธ์ด ๋ฐ๋์ ํ์ํฉ๋๋ค. ์ ์ธ๋์ง ์์ ์๋ณ์์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ์๋ Reference Error(์ฐธ์กฐ ์๋ฌ)๊ฐ ๋ฐ์ํฉ๋๋ค.
4.4 ๋ณ์ ์ ์ธ์ ์คํ ์์ ๊ณผ ๋ณ์ ํธ์ด์คํ
๊ทธ๋ ๋ค๋ฉด ์๋ ์ฝ๋์ ์คํ ๊ฒฐ๊ณผ๋ ์ด๋ป๊ฒ ๋ ๊น์?
console.log(score); // undefined
var score; // ๋ณ์ ์ ์ธ๋ฌธ
๋ณ์์ ์ ์ธ ์ด์ ์ console.log ๋ฉ์๋๋ฅผ ํตํ์ฌ score ๋ณ์๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ Reference Error๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ์ง๋ง undefined๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
๋ณ์ ์ ์ธ์ด ์์ค ์ฝ๋๊ฐ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ์์ , ๋ฐํ์์ด ์๋๋ผ ๊ทธ ์ด์ ๋จ๊ณ์์ ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ ํ์์ด ๋ฐ์ํฉ๋๋ค.
JS ์์ง์์๋ ์์ค ์ฝ๋๋ฅผ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ์คํํ๊ธฐ ์์ ๊ฐ์ฅ ๋จผ์ ์์ค ์ฝ๋์ ํ๊ฐ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ ์คํ์ ์ํ ์ค๋น๋ฅผ ํฉ๋๋ค. ์ด๋ ํ๊ณผ ๊ณผ์ ์์ JS ์์ง์ ๋ณ์ ์ ์ธ์ ํฌํจํ ๋ชจ๋ ์ ์ธ๋ฌธ์ ์์ค ์ฝ๋์์ ์ฐพ์ ๋จผ์ ์คํํ๊ณ , ๋ชจ๋ ํ๊ฐ ๊ณผ์ ์ด ๋๋ ๋ค์ ์ ์ธ๋ฌธ์ ์ ์ธํ ์์ค ์ฝ๋๋ค์ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ์คํ๋ฉ๋๋ค.
์ด๋ฌํ JS ์์ง์ ํน์ง์ผ๋ก ์ธํ์ฌ ๋ณ์ ์ ์ธ์ ์์ค ์ฝ๋์ ์์น์ ์๊ด ์์ด ๋ค๋ฅธ ์ฝ๋๋ณด๋ค ๋จผ์ ์คํ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ์ธ๋ฌธ์ ์์น์ ์๊ด ์์ด ์ด๋์๋ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์ด์ฒ๋ผ ๋ณ์ ์ ์ธ๋ฌธ์ด ์ฝ๋์ ๋งจ ์๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณ ์ ์ ํน์ง์ ํธ์ด์คํ ์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๋ฌํ ํธ์ด์คํ ์ var ๋ฟ๋ง ์๋ let, const, function, function*, class ํค์๋๋ฅผ ์ฌ์ฉํ ๋ชจ๋ ์ ์ธ๋ฌธ์ ์ ์ฉ๋ฉ๋๋ค.
4.5 ๊ฐ์ ํ ๋น
๋ณ์์ ๊ฐ์ ํ ๋นํ ๋๋ ํ ๋น ์ฐ์ฐ์ = ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ ๋น ์ฐ์ฐ์๋ ์ฐ๋ณ์ ๊ฐ์ ์ข๋ณ์ ๋ณ์์ ํ ๋นํฉ๋๋ค.
๋ํ ๋ณ์ ์ ์ธ๊ณผ ๊ฐ์ ํ ๋น์ ํ๋์ ๋ฌธ์ผ๋ก ๋จ์ถํ์ฌ ํํํ ์๋ ์์ต๋๋ค.
let score; // ๋ณ์ ์ ์ธ
score = 80; // ๊ฐ์ ํ ๋น
var x = 30; // ๋ณ์ ์ ์ธ๊ณผ ๊ฐ์ ํ ๋น ํจ๊ป ์งํ(๋จ์ถ ํํ)
์์์ ์ฃผ์ํด์ผํ ์ ์ var x = 30 ์ฒ๋ผ ํ๋์ ๋ฌธ์ผ๋ก ์์ฑํ์ฌ๋ ๋ณ์ ์ ์ธ๊ณผ ๊ฐ์ ํ ๋น์ ๋ฐ๋ก ์งํ๋๋ค๋ ๊ฒ์ ๋๋ค.
๋ฐํ์ ์ด์ ์ ๋ณ์ ์ ์ธ์ด ๋จผ์ ์ด๋ฃจ์ด์ง๊ณ ๋ฐํ์์ ๊ฐ์ ํ ๋น์ด ์งํ๋ฉ๋๋ค. ์ด๋ฌํ ํน์ง ๋๋ฌธ์ ์๋์ ์ฝ๋์ ์ถ๋ ฅ๊ฐ์ ๊ฐ๊ฐ undefined, 80์ ๋๋ค.
console.log(score); // undefined
var score = 80;
console.log(score); // 80
๋ํ, ํด๋น 80์ด๋ผ๋ ๊ฐ์ ๋ณ์ score์ ํ ๋นํ ๋๋ ๊ธฐ์กด undefined ์ ์ฅ๋์ด ์๋ ๊ณต๊ฐ์ 80์ ๋ฎ์ด์์ฐ๋ ๊ฒ์ด ์๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ ๋ค 80์ด๋ผ๋ ๊ฐ์ ์ ์ฅํ๋ค๋ ์ ์ ์ฃผ์ํด์ผ ํฉ๋๋ค.
4.6 ๊ฐ์ ์ฌํ ๋น
์ฌํ ๋น์ ์ด๋ฏธ ๊ฐ์ด ํ ๋น๋์ด ์๋ ๋ณ์์ ์๋ก์ด ๊ฐ์ ๋ ๋ค์ ํ ๋นํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
var๋ let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๊ฐ์ ์ฌํ ๋นํ ์ ์์ต๋๋ค. ์๋ฐํ ๋งํ์๋ฉด var์ ๊ฒฝ์ฐ์๋ ์ ์ธ๊ณผ ๋์์ undefined๋ก ์ด๊ธฐํ๋๊ธฐ ๋๋ฌธ์ ์ฒ์์ผ๋ก ๊ฐ์ ํ ๋นํ๋ ๊ฒ๋ ์ฌํ ๋น์ ํฌํจ๋๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
ํ์ง๋ง const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ฌํ ๋น์ด ๊ธ์ง๋๊ธฐ ๋๋ฌธ์ const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๊ณง ์์์ ๊ฐ์ต๋๋ค.
var score = 80;
score = 20;
์์ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด ์๋์ ๊ฐ์ ์์๋ก ๋์ํ ๊ฒ์ ๋๋ค.
- score์ ์ฃผ์ A ๋งคํ, A์๋ undefined ๊ฐ์ด ์ ์ฅ (์ด๊ธฐํ)
- score์ ์ฃผ์ B ๋งคํ, B์๋ 80์ด ์ ์ฅ (ํ ๋น)
- score์ ์ฃผ์ C ๋งคํ, C์๋ 20์ด ์ ์ฅ (์ฌํ ๋น)
์ต์ข ์ ์ผ๋ก score ๋ณ์์ ๊ฐ์ 20์ ๋๋ค. score ๋ณ์์ ์ด์ ๊ฐ์ธ undefined์ 80์ ๊ฒฝ์ฐ์๋ ์ด๋ ํ ์๋ณ์(์ด ๊ฒฝ์ฐ์๋ ๋ณ์)์๋ ์ฐ๊ฒฐ๋์ด ์์ง ์์ต๋๋ค. ์ด๋ ๋ ์ด์ ํ์ ์์์ ์๋ฏธํ๋ฉฐ ๊ฐ๋น์ง ์ฝ๋ ํฐ์ ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ํด์ ๋๊ฒ ๋ฉ๋๋ค.
4.7 ์๋ณ์ ๋ค์ด๋ฐ ๊ท์น
์์ ๋งํ ๊ฒ์ฒ๋ผ ์๋ณ์๋ ์ด๋ค ๊ฐ์ ๊ตฌ๋ณํด์ ์๋ณํ ์ ์๋ ๊ณ ์ ํ ์ด๋ฆ์ด๋ฉฐ ๋ค์ด๋ฐ ๊ท์น์ ์ค์ํด์ผ ํฉ๋๋ค. ์๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ค์ด๋ฐ ๊ท์น์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ์๋ณ์๋ ํน์๋ฌธ์๋ฅผ ์ ์ธํ ๋ฌธ์, ์ซ์, ์ธ๋์ค์ฝ์ด(_), ๋ฌ๋ฌ ๊ธฐํธ($)๋ฅผ ํฌํจํ ์ ์๋ค.
- ์๋ณ์๋ ์ซ์๋ก ์์ํ ์ ์๋ค.
- ์์ฝ์ด๋ ์๋ณ์๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ํ JS๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ๊ธฐ ๋๋ฌธ์ abc, ABC, aBc๋ ๊ฐ๊ฐ ๋ณ๊ฐ์ ๋ณ์์ ๋๋ค.
var x = 3; // NG -> x ๋ณ์๊ฐ ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ ์ ์์
var score = 80; // OK -> score ์ ์๋ ์ ์๋ฅผ ์๋ฏธ
// ๊ฒฝ๊ณผ ์๊ฐ, ๋จ์๋ ๋ ์ง
var d; // NG
var elapsedTimeInDays; // OK
๋ณ์๋ ์กด์ฌ ๋ชฉ์ ์ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์๋ฏธ๋ฅผ ๋ช ํํ ํํํด์ผ ํฉ๋๋ค. ํนํ JS์ ๊ฒฝ์ฐ์๋ ๋์ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ค ํํ์ ๊ฐ์ ๊ธฐ๋ํ๋ ์ง ๋ณ์๋ช ์์ ๋ํ๋ด๋ ๊ฒ๋ ์ค์ํฉ๋๋ค.
๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ํ๋ ์ด์์ ์์ด ๋จ์ด๋ก ๊ตฌ์ฑ๋ ์๋ณ์๋ฅผ ๋ง๋ค ๋ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํ์ฌ ๊ท์ ํ ๋ช ๋ช ๊ท์น์ ๋๋ค. ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ์ ์ค์ํ๋ฉด ์ข์ ๋ณ์๋ช ์ ๋ง๋ค ์ ์์ผ๋ฉฐ ์ฃผ๋ก ์๋ 4๊ฐ์ง ์ ํ์ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ด ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
// ์นด๋ฉ ์ผ์ด์ค
var firstName;
// ์ค๋ค์ดํฌ ์ผ์ด์ค
var first_name;
// ํ์ค์นผ ์ผ์ด์ค
var FirstName;
// ํ๊ฐ๋ฆฌ์ธ ์ผ์ด์ค
var strFirstName; // ํ์
+ ์๋ณ์ ์ด๋ฆ
var $elem = document.getElementById('id'); // DOM ๋
ธ๋
var observable$ = fromEvent(document, 'click'); // RxJS ์ต์ ๋ฒ๋ธ
JS์์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณ์๋ ํจ์์ ์ด๋ฆ์๋ ์นด๋ฉ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉฐ ์์ฑ์ ํจ์, ํด๋์ค์ ์ด๋ฆ์๋ ํ์ค์นผ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ECMAScript ์ฌ์์ ์ ์๋์ด ์๋ ๊ฐ์ฒด ๋ฐ ํจ์๋ค๋ ์นด๋ฉ ์ผ์ด์ค์ ํ์ค์นผ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ํต์ผํ๋ ๊ฒ์ด ์ฝ๋ ์ ์ฒด์ ๊ฐ๋ ์ฑ์ ํฅ์ํ๋ ๊ฒ์ ํฐ ๋์์ด ๋ฉ๋๋ค.