๐Ÿ’ช JavaScript. Engine w/ ZeroCho TV

[meษช]ยท2022๋…„ 4์›” 7์ผ
0

1-2. Today I Learned. JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
8/8

Preface

๐Ÿ“Œ ๊ฐœ๋ฐœ ๊ณต๋ถ€ 9๊ฐœ์›” ์ฐจ์ธ to-be ๊ฐœ๋ฐœ์ž์˜ ์ž์Šต blog๐Ÿ™‚๏พ Apr 03 ~ 09, 2022


ํ˜„์žฌ ์ƒํƒœ
coding test์™€ ๋ฉด์ ‘์„ ์•ž๋‘๋ฉด์„œ ์ž˜ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•  ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋งˆ์นจ ์ข‹์€ ๊ฐ•์˜๊ฐ€ ๋‚˜์™€์„œ ์‚ดํŽด๋ณด์•˜๋‹ค.


Summary

  • call stack์€ ํ˜ธ์ถœ, scope๋Š” ์„ ์–ธ์„ ์ƒ๊ฐํ•˜๊ธฐ
  • ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์„ ๋งŒ๋‚˜๋ฉด return ๊ฐ’์„ ๋„ฃ์–ด๋ณด๊ธฐ or ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์„ ๋„ฃ๊ณ  ์‹ถ์œผ๋ฉด return ๊ฐ’์„ ๋„ฃ์–ด์„œ ๋ง์ด ๋˜๋Š”์ง€ ๋ณด๊ธฐ
  • ํ•จ์ˆ˜ ์‹คํ–‰๊ณผ ์ข…๋ฃŒ ์ˆœ์„œ ์ซ“์•„๊ฐ€๋Š” ๋ฒ• ์ตํžˆ๊ธฐ
  • call stack์˜ '(anonymous)'๋Š” ๋งจ ์ฒ˜์Œ์— file ์ž์ฒด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฑธ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ
  • call stack ์ƒ๊ฐํ•  ๋• ์ผ๋‹จ ์„ ์–ธ์€ ์ ‘๊ณ  ํ˜ธ์ถœ๋œ ๋ถ€๋ถ„๋งŒ ๋ณด๊ธฐ
  • ํ•จ์ˆ˜์˜ ์„ ์–ธ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์•Œ๊ณ  ์‹ถ์„ ๋• lexical scope๋ฅผ ๊ทธ๋ ค์„œ scope chain์„ ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐ€๋ณด๊ธฐ, ํ˜น์€ ์„ ์–ธ ์ง€๋„ ๊ทธ๋ ค๋ณด๊ธฐ
  • hoisting์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์„ ๋งŒ๋“ค์ง€ ๋ง ๊ฒƒ
    e.g. ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์— ์ ‘๊ทผํ•˜๋Š” code
    cf. eslint ์‚ฌ์šฉํ•ด์„œ ์œ„ ์˜ˆ์‹œ ์ƒํ™ฉ ๋ฐฉ์ง€
    • var... ์™œ const๋‚˜ let ์จ์•ผ ํ•˜๋ƒ๋ฉด
      • ์™œ var O; ์ด ๋ถ€๋ถ„๋งŒ ์˜ฌ๋ผ๊ฐ€
      • ์™œ ์„ ์–ธ์„ ๋‘ ๋ฒˆ ํ•ด ํ—ท๊ฐˆ๋ฆฌ๊ฒŒ
      • ์™œ var O = "OO"์„ window.O = "OO"๋กœ ๋“ฑ๋กํ•ด
    • ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ง  code๋ฅผ ๋ถ„์„ํ•  ๋• var, function ๊ฐ™์€ ๊ฑธ ์œ„๋กœ ์˜ฌ๋ฆฐ ํ›„ scope chain๋Œ€๋กœ ์ƒ๊ฐํ•ด ๋ณด๊ธฐ
  • this๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ window
    • JS์™€ node ๋ชจ๋‘์—์„œ globalThis๋กœ ํ†ตํ•ฉ๋˜์—ˆ์œผ๋‹ˆ ์ฐธ๊ณ 
    • this๊ฐ€ ๋ญ”์ง€๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ •ํ•ด์ง, ์ฆ‰ ํ˜ธ์ถœ stack ๊ทธ๋ฆด ๋•Œ this๋„ ๊ฐ™์ด ์ •ํ•ด์ง
      • ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ๊ทธ ์•ž์— ๊ฐ์ฒด๊ฐ€ ๋ถ™๋Š”๋‹ค๋ฉด this๋Š” ๊ทธ ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝ๋จ (๋‹จ, ํ•จ์ˆ˜๊ฐ€ ํ™”์‚ดํ‘œํ•จ์ˆ˜์ด๋ฉด this๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ)
      • ๊ทธ ์™ธ์—๋„ ํ•จ์ˆ˜.new, ํ•จ์ˆ˜.bind, ํ•จ์ˆ˜.apply, ํ•จ์ˆ˜.call method๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ this๊ฐ€ ๋ณ€๊ฒฝ๋จ

โž• afterthought

๋‹ค๋ฅธ ๋ถ„๋“ค ๊ฐ•์˜๋„ ์ •๋ง ์ข‹์ง€๋งŒ ์ œ๋กœ์ดˆ๋‹˜ ๊ฐ•์˜ ๋„ˆ๋ฌด ์ข‹๋‹ค. ๊ฐ•์˜ ๊ฐœ์ˆ˜ ๋ณด๊ณ  ๊ฒ ๋จน์–ด์„œ ๋‚˜์ค‘์—์•ผ ์ ‘ํ–ˆ๋Š”๋ฐ, ๊ทธ๊ฒŒ ๋„ˆ๋ฌด ํ›„ํšŒ๋  ์ •๋„๋กœ ์ข‹๋‹ค. ์ œ๋กœ์ดˆ๋‹˜ ๊ฐ•์˜๋ฅผ ๋ดค์œผ๋ฉด ๋” ๋นจ๋ฆฌ ๊ฐœ๋…์„ ์žก์„ ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. "A๋Š” OOO๋‹ค"๋ฅผ ์•Œ๋ ค์ฃผ์‹œ๊ธฐ์— ์•ž์„œ "A์˜ ๊ธฐ๋ณธ ๊ฐ’์€ OOO๋‹ค."๋ฅผ ๋จผ์ € ์•Œ๋ ค์ฃผ์…”์„œ ์ข‹์•˜๋‹ค. JS ์‹œ์ž‘ํ•  ๋•Œ ์ด๊ฒƒ๋„ ๊ฐ™์ด ์•Œ๋ ค์ค˜์•ผ ํ•  ๊ฒƒ ๊ฐ™์€๋ฐ ์ด๊ฑด ์™œ curriculum์— ์—†๋Š” ๊ฑด์ง€... ์•„์‰ฝ๋‹ค.

Endnote

๐Ÿ™‡ the source of this content

์ธ๊ฐ„ JS Engine ๋˜๊ธฐ w/ ์ œ๋กœ์ดˆ

profile
๋Š๋ ค๋„ ํ•  ๊ฑฐ์•ผ.......

0๊ฐœ์˜ ๋Œ“๊ธ€