-
Notifications
You must be signed in to change notification settings - Fork 0
inside_javascript_3
์คํ ์ปจํ ์คํธ์ ์ ์๋ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ํ์ํํ๊ณ ๊ตฌ๋ถํ๋ ์ถ์์ ์ธ ๊ฐ๋ ์ด๋ค. ํ์ด์ ๋งํ๋ฉด ์คํ ๊ฐ๋ฅํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ๋ธ๋ก์ด ์คํ๋๋ ํ๊ฒฝ์ด๋ผ๊ณ ํ ์ ์๋ค.
์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋๋ ๊ฒฝ์ฐ๋ ์ ์ญ ์ฝ๋, eval() ํจ์๋ก ์คํ๋๋ ์ฝ๋, ํจ์ ์์ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ์ด๋ค. ECMAScript์์๋ ์คํ ์ปจํ ์คํธ์ ์์ฑ์ ํ์ฌ ์คํ๋๋ ์ปจํ ์คํธ์์ ์ด ์ปจํ ์คํธ์ ๊ด๋ จ ์๋ ์คํ ์ฝ๋๊ฐ ์คํ๋๋ฉด, ์๋ก์ด ์ปจํ ์คํธ๊ฐ ์์ฑ๋์ด ์คํ์ ๋ค์ด๊ฐ๊ณ ์ ์ด๊ถ์ด ๊ทธ ์ปจํ ์คํธ๋ก ์ด๋ํ๋ค๋ผ๊ณ ์ค๋ช ํ๋ค.
-
์คํ ์ปจํ ์คํธ ์์ฑ ๊ณผ์
- ํ์ฑ ๊ฐ์ฒด ์์ฑ : ์์ง์์ ์ปจํ ์คํธ ์คํ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด๋ฅผ ์์ฑ (= ํ์ฑ ๊ฐ์ฒด or ๋ณ์ ๊ฐ์ฒด)
- arguments ๊ฐ์ฒด ์์ฑ
- ์ค์ฝํ ์ ๋ณด ์์ฑ : ํด๋น ์ปจํ
์คํธ ์ ํจ๋ฒ์๋ฅผ ๋ํ๋ด๋ ์ ๋ณด๋ฅผ ์์ฑ (์ค์ฝํ ์ฒด์ธ ์์ฑ
[[scope]]) - ๋ณ์ ์์ฑ : ์คํ ์ปจํ ์คํธ ๋ด๋ถ์์ ์ฌ์ฉ๋๋ ์ง์ญ ๋ณ์์ ์์ฑ (ํจ์๋ ํฌํจ)
- this ๋ฐ์ธ๋ฉ : this ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ด ํ ๋น ๋จ, this๊ฐ ์ฐธ์กฐ ๊ฐ์ฒด๊ฐ ์์ ๊ฒฝ์ฐ ์ ์ญ ๊ฐ์ฒด ์ฐธ์กฐ
- ์ฝ๋ ์คํ : ์ด ๊ณผ์ ์์ ๊ฐ์ด ํ ๋น ๋จ.
์ ์ญ ์คํ ์ปจํ ์คํธ๋ arguments ๊ฐ์ฒด๊ฐ ์์ผ๋ฉฐ ์ ์ญ ๊ฐ์ฒด ํ๋๋ง์ ํฌํจํ๋ ์ค์ฝํ ์ฒด์ธ์ด ์๋ค.
-
์ค์ฝํ ์ฒด์ธ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ตฌ๋ฌธ(ex. for(), {}, if{}) ์ ํจ ๋ฒ์๊ฐ ์๋ค. ์ค์ง ํจ์๋ง์ด ์ ํจ๋ฒ์์ ํ ๋จ์๊ฐ ๋๋ค. ์ด ์ ํจ ๋ฒ์๋ฅผ ๋ํ๋ด๋ ์ค์ฝํ๊ฐ[[scope]]ํ๋กํผํฐ๋ก ๊ฐ ํจ์ ๊ฐ์ฒด ๋ด์์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํ์์ผ๋ก ๊ด๋ฆฌ๋๋๋ฐ, ์ด๋ฅผ _์ค์ฝํ ์ฒด์ธ_์ด๋ผ๊ณ ํ๋ค.3 .... 2 ๋ณ์ ๊ฐ์ฒด 2 1 ๋ณ์ ๊ฐ์ฒด 1 0 ๋ณ์ ๊ฐ์ฒด 0 - ๊ฐ ํจ์ ๊ฐ์ฒด๋
[[scope]]ํ๋กํผํฐ๋ก ํ์ฌ ์ปจํ ์คํธ์ ์ค์ฝํ ์ฒด์ธ์ ์ฐธ์กฐํ๋ค. - ํจ์ ์คํ์ ์๋ก์ด ์คํ ์ปจํ
์คํธ๋ ํ์ฌ ์คํ๋๋ ํจ์ ๊ฐ์ฒด์
[[scope]]ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ๊ณ ,
์๋กญ๊ฒ ์์ฑ๋ ๋ณ์ ๊ฐ์ฒด๋ฅผ ํด๋น ์ฒด์ธ์ ์ ์ผ ์(=์)์ ์ถ๊ฐํ๋ค. - ์ค์ฝํ ์ฒด์ธ = ํ์ฌ ์คํ ์ปจํ ์คํธ ๋ณ์ ๊ฐ์ฒด + ์์ ์ปจํ ์คํธ์ ์ค์ฝํ ์ฒด์ธ
์ค์ฝํ ์ฒด์ธ์์ ๋ณ์๋ฅผ ์ฐพ๋ ํ์๋ฅผ ์๋ณ์ ์ธ์(Identifier resolution)์ด๋ผ๊ณ ํ๋ค. ์๋ณ์ ์ธ์์ ์ฒด์ธ์ ์ฒซ๋ฒ์งธ ๋ณ์ ๊ฐ์ฒด๋ถํฐ ์์ํด ๋์๋๋ ์ด๋ฆ์ ๊ฐ์ง ํ๋กํผํฐ๋ฅผ ํ์ธํ๋ค.
ES5,6์์๋ outer๋ฅผ ์ฐธ์กฐ๋ฅผ ํตํด ์๋ณ์๋ฅผ ์ฐพ๋๋ค. (์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ์คํ) - ๊ฐ ํจ์ ๊ฐ์ฒด๋