SCOPE
์ค์ฝํ๋ ์ฐธ์กฐ ๋์ ์๋ณ์(identifier, ๋ณ์, ํจ์์ ์ด๋ฆ๊ณผ ๊ฐ์ด ์ด๋ค ๋์์ ๋ค๋ฅธ ๋์๊ณผ ๊ตฌ๋ถํ์ฌ ์๋ณํ ์ ์๋ ์ ์ผํ ์ด๋ฆ)๋ฅผ ์ฐพ์๋ด๊ธฐ ์ํ ๊ท์น์ด๋ค. ์๋ณ์๋ ์์ ์ด ์ด๋์์ ์ ์ธ๋๋์ง์ ์ํด ์์ ์ด ์ ํจํ ๋ฒ์๋ฅผ ๊ฐ๋๋ค.
์ด๋ฆ์ด ๊ฐ์ ๋ณ์ x๊ฐ ์ค๋ณต ์ ์ธ๋์ด์๋ ์์์ด๋ค. ์ ์ญ์ผ๋ก ์ ์ธ๋ x๋ ์ด๋์์๋ ์ฐธ์กฐํ ์ ์์ง๋ง foo ํจ์ ๋ด๋ถ์์ ์ ์ธ๋ x๋ ๋ด๋ถ์์๋ง ์ฐธ์กฐํ ์ ์๊ณ , ํจ์ ์ธ๋ถ์์๋ ์ฐธ์กฐํ ์ ์๋ค. ์ด๋ฌํ ๊ท์น์ ์ค์ฝํ๋ผ๊ณ ํ๋ค. ๋ชจ๋ ๋ณ์๋ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค.
์ ์ญ ์ค์ฝํ ( Global Scope ) : ์ฝ๋ ์ด๋์์๋ ์ง ์ฐธ์กฐ ๊ฐ๋ฅ
์ง์ญ ์ค์ฝํ ( Local Scope or Function-Level Scope) : ํจ์ ์ฝ๋ ๋ธ๋ก์ด ๋ง๋ ์ค์ฝํ๋ก ํจ์ ์์ ๊ณผ ํ์ ํจ์์์๋ง ์ฐธ์กฐ ๊ฐ๋ฅ
ํ ์ธ์ด๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ ( block-level scope )๋ฅผ ๋ฐ๋ฅธ๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์ ๋ ๋ฒจ ์ค์ฝํ( function-level scope ) ๋ฅผ ๋ฐ๋ฅธ๋ค. ํจ์ ๋ ๋ฒจ ์ค์ฝํ๋ ํจ์ ์ฝ๋ ๋ธ๋ก ๋ด์์ ์ ์ธ๋ ๋ณ์๋ ํจ์ ์ฝ๋ ๋ธ๋ก๋ด์์๋ง ์ ํจํ๋ฉฐ, ํจ์ ์ธ๋ถ์์๋ ์ ํจํ์ง ์๋ค.
๋จ, ECMAScript 6์์ ๋์
๋ let
ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ ์ญ ๋ณ์๋ ์ ์ญ ๊ฐ์ฒด(Global Object)์ธ window
์ ํ๋กํผํฐ์ด๋ค.
์ ์ญ ๋ณ์์ ์ฌ์ฉ์ ๋ณ์ ์ด๋ฆ์ด ์ค๋ณต๋ ์ ์์ผ๋ฉฐ, ์๋์น ์์ ์ฌํ ๋น์ ์ํ ์ํ ๋ณํ๋ก ์ฝ๋๋ฅผ ์์ธกํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ฏ๋ก ์ฌ์ฉ์ ์ต์ ํด์ผํ๋ค.
Lexical Scope
lexical scope๋ ํจ์๋ฅผ ์ด๋์ ํธ์ถํ๋์ง๊ฐ ์๋๋ผ ์ด๋์ ์ ์ธํ์๋์ง์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ lexical scope๋ฅผ ๋ฐ๋ฅด๋ฏ๋ก ํจ์๋ฅผ ์ ์ธํ ์์ ์ ์์ ์ค์ฝํ๊ฐ ๊ฒฐ์ ๋๋ค.
lexical scope๋ฅผ ๋ฐ๋ฅด๋ฏ๋ก, foo()
, bar()
ํธ์ถ์ 1์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ต์ํ์ ์ ์ญ๋ณ์ ์ฌ์ฉ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ณ์๋ช ์ ์ค๋ณต์ ํ์ฉํ๋ฏ๋ก, ์ ์ญ๋ณ์์ ๋ฌด๋ถ๋ณํ ์ฌ์ฉ์ ๋ฌด์ฒ ์ํํ๋ค. ์ ์ญ ๋ณ์๋ฅผ ๋ฐ๋์ ์ฌ์ฉํด์ผํ ์ด์ ๊ฐ ์๋ค๋ฉด, ์ง์ญ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ , ๋ณ์์ ๋ฒ์์ธ ์ค์ฝํ๋ ์ข์์๋ก ์ข๋ค.
์ ์ญ๋ณ์๋ฅผ ์ต์ํํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ ์ ์ญ๋ณ์ ๊ฐ์ฒด๋ฅผ ํ๋ ์์ฑํด์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ฆ์ ์คํ ํจ์
์ฆ์ ์คํ ํจ์(IIFE, Immediately-Invoked Function Expression)๋ฅผ ์ฌ์ฉํ๋ฉด, ์ ์ญ๋ณ์ ์ฌ์ฉ์ ์ต์ ํ ์ ์๋ค.
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ ์ญ๋ณ์๋ฅผ ๋ง๋ค์ง ์์ผ๋ฏ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์์ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ์ฆ์ ์คํ ํจ์๋ ์ฆ์ ์คํ๋๊ณ ๊ทธ ํ ๋ฐ๋ก ์ฌ๋ผ์ง๋ค.
์ฐธ์กฐ ํ์ด์ง
Last updated