
1-12์ฅ ๋ด์ฉ์ ์คํฐ๋๋ฅผ ์งํํ๋ฉฐ, var, let, const์ ์ ์ธ๊ณผ ๊ฐ ํ ๋น์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ๋๋ด๋ค.
๊ทธ ๊ณผ์ ์์ ์ ES6์์ let๊ณผ const๋ฅผ ์ถ๊ฐํ๋์ง, ์ด๋ฅผ ์ถ๊ฐํด ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ๋์ง ์๋ฒฝํ๊ฒ ์ดํด๊ฐ ๋์ด์ ๊ธฐ๋ถ์ด ๋๋ฌด ์ข์๋ค.
์ค๋ ์ฑ ์ ํ ์ฅ ๋ ๋๊ฒจ๋ณด๋ ๋ฐ๋ก scope์ ๋ํ ๋ด์ฉ, ์ด์ด์ let๊ณผ const ๋ณ์์ ๋ํ ๋ด์ฉ์ด ์ฐ๋ฌ์ ๋์๋ค.
๊ทธ๋์ ์ฝ๊ฐ ์ ๋๋ ๋ง์์ผ๋ก ๊ณต๋ถ๋ฅผ ํด๋ณด์๋ค!
๋ด์ฉ ์์ฒด๊ฐ ์ฌ๋ฐ๋ค๊ธฐ ๋ณด๋ค๋, ๊ณต๋ถํ๊ณ ๊ถ๊ธํ๋ ์ ์ ์๋ก ์ด์ผ๊ธฐํ๊ณ , ๋ ์ด๋ฅผ ํด๊ฒฐํด๋๋๋ฐ, ์ฑ
์์๋ ๋ฐ๋ก ์ด์ด์ ๊ทธ ๋ด์ฉ์ด ๋์ค๋ ๊ฑธ ๋ณด๋,, ๋ญ๊ฐ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ํธ๊ธฐ์ฌ์ด ๊ณต๋ถ๋ฅผ ์ ๋๋ก ํ๊ณ ์๋ค๋ ์ฆ๋ช
๊ฐ์์,,,,,,,,
์๋ฌดํผ ์ด์ scope์ ๋ํด ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
๋ชจ๋ ์๋ณ์๋, ์ ์ธ๋ ์์น์ ์ํด ์ ํจ ๋ฒ์๊ฐ ๊ฒฐ์ ๋๊ณ , ์ด๋ฅผ scope๋ผ๊ณ ํ๋ค.
JavaScript ์์ง์ code ์คํ์ code์ ๋ฌธ๋งฅ์ ๊ณ ๋ คํ๋ค.
์ด๋ฆ์ด ๊ฐ์ ๋ ๊ฐ์ ๋ณ์๊ฐ ์์๋๋, ๋ ๋ณ์์ scope๋ฅผ ๊ณ ๋ คํด์, ์ด๋ค ๋ณ์๋ฅผ ์ฐธ์กฐํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
๋ง์ฝ ์ด๋ scope๋ผ๋ ๊ฐ๋
์ด ์๋ค๋ฉด?
์ ์ฐํ JavaScript ์์ง์ด๋ผ๊ณ ํ ์ง๋ผ๋ ์ถฉ๋์ ํผํ ์๋ ์์ ๊ฒ์ด๋ค.
ํ๋์ scope์๋ ๊ฐ์ ์ด๋ฆ์ ์๋ณ์๊ฐ ๋ ์ด์ ์กด์ฌํ ์ ์๋ค.
ํ์ผ ์์คํ ์ ์๊ฐํด๋ณด๋ฉด ์ดํด๊ฐ ์ฝ๋ค.
ํ๋์ ํ์ผ ์์, ๋์ผํ ์ด๋ฆ์ ๋ฌธ์๋ฅผ ๋ ๊ฐ ์ด์ ๋ง๋ค ์๋ ์๋ค.
์ด๋์ ํ์ผ์ด scope์ด๊ณ , ๋ฌธ์๊ฐ ๋ณ์๋ผ๊ณ ์๊ฐํด๋ ์ข๋ค.
JavaScript๊ฐ code์ ๋ฌธ๋งฅ์ ๊ณ ๋ คํ๋ค๊ณ ํ๋ค.
์ด๋ ๋ฌธ๋งฅ์ด๋ผ๋ ๊ฒ ์ด๋ค ์๋ฏธ์ผ๊น?
code๊ฐ ์ด๋์์ ์คํ๋๋ฉฐ, ์คํ๋๋ ์ง์ ์ ์ฃผ๋ณ์๋ ์ด๋ค code๊ฐ ์๋์ง๋ฅผ lexical environment ๋ผ๊ณ ํ๋ค.
์ด๋ฅผ ์คํํ๊ธฐ ์ํด ๊ตฌํํ ๊ฒ์ด execution context, ์ฆ ์คํ ์ปจํ ์คํธ์ด๋ค.
[์ฐธ๊ณ ์ ๋ฆฌ ๊ฐ๋ ]
์์ ์ดํด๋ณธ ํจ์์์, ์ฌ๋ฌ ํจ์๊ฐ ์ค์ฒฉ๋ ์ ์๋ค๊ณ ํ๋ค.
๊ทธ๋ ๊ธฐ์ ํจ์ ๋ชธ์ฒด ๋ด๋ถ์์๋ง ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ local code๋ ์ค์ฒฉ์ด ๊ฐ๋ฅํ๋ค.
์ด๋ค์ scope๋ ์ค์ฒฉ์ด ๋๋๋ฐ, ์ด๋ ๊ฒ ์๋ก ์ค์ฒฉ ์ฐ๊ฒฐ๋์ ๊ณ์ธต์ ์ธ ํํ๋ฅผ ๋๋ scope๋ค์ scope chain ์ด๋ผ๊ณ ํ๋ค.
๋ณ์๋ฅผ ์ฐธ์กฐํ ๋, JavaScript ์์ง์ด scope chain์ ๊ฐ์ง๊ณ ์ด๋ค ์ผ์ ํ ์ง ์์์ด ๊ฐ๋๊ฐ?
JavaScript ์์ง์, scope chain์ ๋ฐ๋ผ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ scope์์๋ถํฐ, ์์ scope๋ก ์ด๋ํ๋ฉด์ ์ ์ธ๋ ๋ณ์๋ฅผ ๊ฒ์ํ๋ค.
์ ๋ฆฌํ์๋ฉด scope๋ผ๋ ๊ฒ์ ๋ณ์๋ฅผ ๊ฒ์ํ๋ ๊ท์น์ด๋ค.
์ข ๋ ์๋ฐํ ๋งํ์๋ฉด, ์๋ณ์๋ฅผ ๊ฒ์ํ๋ ๊ท์น์ด๋ค.
scope๋ฅผ ๊ฐ์ง๋ ๊ฒ์ ๋ณ์ ๋ฟ ์๋๋ผ, ํจ์๋ ์๋ค..!
๋๋ถ๋ถ์ ์ธ์ด์์๋, ํจ์๋ฟ ์๋๋ผ ๋ชจ๋ code block์ด local scope๋ฅผ ๋ง๋ ๋ค.
์ด๋ฅผ block level scope๋ผ๊ณ ํ๋ฉฐ, ES6์์ ๋์
๋ let๊ณผ const๊ฐ block level scope๋ฅผ ์ง์ํ๋ค.
๋ฐ๋ฉด var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋,
ํจ์์ code block๋ง์ local scope๋ก ์ธ์ ํ๋ค.
์ด๋ฅผ ํจ์ ๋ ๋ฒจ scope๋ผ๊ณ ํ๋ค.
๊ทธ๋ฌ๋๊น ํจ์ ๋ฐ์ code block ์์์ var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋?
์ ์ญ๋ณ์๊ฐ ๋๋ค๋ ๊ฒ์ด๋ค.
ํจ์๋ฅผ ์ด๋์์ ํธ์ถํ๋๊ฐ?์ ๋ฐ๋ผ scope๊ฐ ๊ฒฐ์ ๋๋ ๋ฐฉ์์ด๋ค.
ํจ์๋ฅผ ํธ์ถ ์์ ์ ๋์ ์ผ๋ก ์์ scope๋ฅผ ๊ฒฐ์ ํด์ผํ๋ค.
.. ์ด๋ฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ ์ธ์ด๋ฅผ ๊ณต๋ถํด๋ณธ ์ ์ด ์๋๊ฐ..?
๋๋ถ๋ถ์ ์ธ์ด์์๋ lexical scope ๋ฐฉ์์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
ํจ์๋ฅผ ์ด๋์์ ์ ์ํ๋๊ฐ?์ ๋ฐ๋ผ scope๊ฐ ๊ฒฐ์ ๋๋ ๋ฐฉ์์ด๋ค.
ํจ์ ์ ์๊ฐ ์คํ๋๋ฉด ํจ์๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ , ๊ฐ์ฒด๊ฐ ์์ scope๋ฅผ ๊ธฐ์ตํ๋ ๋ฐฉ์์ด๋ค.
ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์์ scope๋ฅผ ์ฐธ์กฐํ๊ฒ๋๋ค.
var ํน์ง์ ์ธ scope๋ฅผ ์ ๋ฆฌํด ๋ณผ ์ ์๋ ํํธ์๋ ๊ฒ ๊ฐ๋ค.