๋ชจ๋˜ JS Deep dive #04 | ๋ณ€์ˆ˜

๐Ÿ“Œ ๋ณ€์ˆ˜์˜ ํ•„์š”์„ฑ

  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด 10 + 20์˜ ์—ฐ์‚ฐ์„ ํ•  ๋•Œ 10, 20, +๋ผ๋Š” ๊ธฐํ˜ธ(literal๊ณผ operator)๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, 10 + 20์ด๋ผ๋Š” ํ‘œํ˜„์‹(expression)์˜ ์˜๋ฏธ๋ฅผ parsingํ•œ๋‹ค.
  2. ๊ทธ ํ›„์— operator๊ธฐ์ค€ ์–‘ ์˜†์˜ ํ”ผ์—ฐ์‚ฐ์ž(operand)๋ฅผ ๊ฐ๊ฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ํŠน์ • ์˜์—ญ๋‚ด์˜ ์ฃผ์†Œ์— ๊ธฐ์–ตํ•œ๋‹ค.
  3. CPU๊ฐ€ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜๊ณ , 30 ์ด๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ž„์˜์˜ ์ฃผ์†Œ์— ์ €์žฅํ•œ๋‹ค.

โ“ ์ด 30์ด๋ผ๋Š” ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ

=> ๋ณ€์ˆ˜๋Š” ํ•˜๋‚˜์˜ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ™•๋ณดํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ž์ฒด ๋˜๋Š” ๊ทธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ™์ธ ์ด๋ฆ„์„ ๋งํ•œ๋‹ค.


๐Ÿ“Œ JS์˜ ๋ณ€์ˆ˜ ์„ ์–ธ

JS์˜ ๋ณ€์ˆ˜ ์„ ์–ธ์€ 2๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ˆ˜ํ–‰๋œ๋‹ค. [1. ์„ ์–ธ ๋‹จ๊ณ„(๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋“ฑ๋กํ•ด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ๋ณ€์ˆ˜์˜ ์กด์žฌ๋ฅผ ์•Œ๋ฆผ), 2. ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„(๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ  undefined๋ฅผ ํ• ๋‹นํ•ด ์ดˆ๊ธฐํ™”)]

์„ ์–ธ ๋‹จ๊ณ„์—์„œ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋น„๋กฏํ•ด ๋ชจ๋“  ์‹๋ณ„์ž๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋“ฑ๋ก๋œ๋‹ค.

์‹คํ–‰ ์ปจํ…์ŠคํŠธ

JS ์—”์ง„์ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€&์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ณ , ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์˜์—ญ์œผ๋กœ ์‹๋ณ„์ž์™€ ์Šค์ฝ”ํ”„๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

=> ์ฆ‰ ์–ด๋–ค ๊ฐ’๋„ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์•„๋„ undefined๋กœ ์•”๋ฌต์ ์ธ ์ดˆ๊ธฐํ™”๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.


๐Ÿ“Œ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์€ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ฅผ JSํ•ด์„๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์ƒ๋‹จ์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ธ์‹ํ•ด์„œ ๋ณ€์ˆ˜์„ ์–ธ์ด ๋Ÿฐํƒ€์ž„ ์ด์ „ ๋‹จ๊ณ„์— ๋จผ์ € ์‹คํ–‰๋˜๋Š” JS ํŠน์ง•์ด๋‹ค.

console.log(score); //undefined
var score = 80;
console.log(score); //80

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ๋™์‹œ์— ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ๋„ ์„ ์–ธ์€ ๋Ÿฐํƒ€์ž„ ์ด์ „์— ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ๋ฒˆ์งธ ๋ผ์ธ์—์„œ undefined๊ฐ€ ๋‚˜์™”๋‹ค. ์ฆ‰ var score; score = 80; ์ด๋ ‡๊ฒŒ ๋‘ ์ค„๋กœ ๋‚˜๋ˆˆ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.