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/ ์ ๋ก์ด