๐Outer์ ์ค์ฝํ์ฒด์ด๋
๐ก Outer : ์ด์ ๋ ์์ปฌ ํ๊ฒฝ์ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ์ ํ๊ณ ํ๊ณ ๋ด๋ ค๊ฐ ์ ์๋ค.
์ ์ ๋ช
์นญ : Outer Enviroment Reference(์ธ๋ถ ํ๊ฒฝ ์ฐธ์กฐ)
๐ก Scope Chaining : ์์ ์ค์ฝํ์ ์ฐ๊ฒฐ๋์ด ์์ด ์ฐธ์กฐํ ์ ์๋ ๊ฒ
Outer๋ฅผ ํตํด Scope Chaining์ ํ ์ ์๊ฒ ๋๋ค.
Outer๋ ํ์ฌ ๋ ์์ปฌ ํ๊ฒฝ์์ ์ฐธ์กฐํ ์๋ณ์๊ฐ ์๋ค๋ฉด, ์ด์ ์ ๋ ์์ปฌ ํ๊ฒฝ์ผ๋ก ๊ฐ์ ์๋ณ์๋ฅผ ์ฐพ๋๋ค. ์ด๋ ๊ฒ ์ฐพ์ ๋๊น์ง ์ฐพ์ ๋ด๋ ค๊ฐ๊ณ , ์๋ณ์๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด ๊ทธ ์๋ณ์์ ๊ฐ์ ์ถ๋ ฅํ๊ณ ๋ ์ด์ ์ด์ ๋ ์์ปฌ ํ๊ฒฝ์ผ๋ก ๋ด๋ ค๊ฐ์ง ์๊ธฐ ๋๋ฌธ์ ์ฝ์คํ ๊ณต๊ฐ์์ ๋์ผํ ์๋ณ์๊ฐ ์ฌ๋ฟ์ด์ด๋ ๊ฐ์ ๊ฒฐ์ ํ ์ ์๋ค. ์ด๊ฒ์ ์๋ณ์ ๊ฒฐ์ ์ด๋ผ๊ณ ํ๋ค.
์์๋ฅผ ํตํด ์์๋ณด์.
let food = "๋ฐฅ";
function ์ค๊ตญ์ง() {
let food = "์ง์ฅ๋ฉด";
function ๊ณ ๊ธฐ์ง() {
let food = "์ผ๊ฒน์ด";
function ๋ถ์์ง() {
console.log(food);
console.trace();
}
๋ถ์์ง();
}
๊ณ ๊ธฐ์ง();
}
์ค๊ตญ์ง();
์์ ๊ฐ์ ์ฝ๋๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์์๋ก ์ฝ์คํ์ ์์ด๊ณ , outer๋ก ์ค์ฝํ์ฒด์ด๋์ด ๋๋ ์ํ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ์ฌ ํ์ฑํ ๋ ์คํ ์ปจํ ์คํธ(์ ์ผ ์์ ์์ธ ์ปจํ ์คํธ)๋ถํฐ ์์ํ์ฌ์ food์ ๊ฐ์ ์ฐพ๊ธฐ ์์ํ๋ค. ํ์ฑํ ๋ ๋ถ์์ง ํจ์์ food์๋ณ์๊ฐ ์๊ธฐ ๋๋ฌธ์ outer๋ฅผ ํตํด ์ด์ ์ ๋ ์์ปฌ ํ๊ฒฝ์ ์ฐธ์กฐํ์ฌ ๊ณ ๊ธฐ์ง ํจ์์ ์๋ โ์ผ๊ฒน์ดโ์ ์ฐธ์กฐํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์ด์ ๋ด๋ ค๊ฐ์ง ์๊ณ ์ถ๋ ฅ๋๊ธฐ ๋๋ฌธ์ โ์ผ๊ฒน์ดโ ์ด๋ผ๋ ๊ฐ์ด ๋์ค๊ฒ ๋๋ค.
๋ฐ์ ์ฝ๋๋ฅผ ๋ณด์.
let food = "๋ฐฅ";
function ์ค๊ตญ์ง() {
let food = "์ง์ฅ๋ฉด";
๊ณ ๊ธฐ์ง();
}
function ๊ณ ๊ธฐ์ง() {
let food = "์ผ๊ฒน์ด";
๋ถ์์ง();
}
function ๋ถ์์ง() {
console.log(food);
console.trace();
}
์ค๊ตญ์ง();
์ด ์ฝ๋๋ ์ธ๋ป๋ณด๋ฉด ์์ ์ฝ๋์ ๋น์ทํด๋ณด์ธ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๊ฐ์ด ์ค๊ตญ์ง ํจ์์์์ ๊ณ ๊ธฐ์ง ํจ์๋ฅผ ๊ณ ๊ธฐ์ง ํจ์์์์ ๋ถ์์ง ํจ์๋ฅผ ํธ์ถํ ์ํ์ด๋ค. ์ฌ์ง์ด ์ฝ์คํ์ ์์ด๋ ์์๋ ๋๊ฐ๋ค. (console.trace()๋ฅผ ํตํด์ ํ์ธํ ์ ์๋ค) ํ์ง๋ง, ์ด ์ฝ๋์์ food์ ๊ฐ์ โ์ผ๊ฒน์ดโ์ด ์๋ โ๋ฐฅโ์ ์ถ๋ ฅํ๋ค.
๊ทธ ์ด์ ๋ ์ค์ฝํ์ฒด์ด๋ ๋ฒ์ ๋๋ฌธ์ด๋ค. ์ฒ์ ์์ฑํ ์ฝ๋๋ ํจ์์์ ํจ์๊ฐ ์ ์ธ๋๊ณ ํธ์ถ๋๋ ๊ตฌ์กฐ์๊ธฐ ๋๋ฌธ์ ๋ถ์์ง ์์ ์ค์ฝํ๊ฐ ๊ณ ๊ธฐ์ง์ด๊ณ , ๊ณ ๊ธฐ์ง ์์ ์ค์ฝํ๊ฐ ์ค๊ตญ์ง์ด๊ณ , ์ค๊ตญ์ง ์์ ์ค์ฝํ๊ฐ ๊ธ๋ก๋ฒ์ด ๋๋ค. ๊ทธ๋์ ์ด๋ค์ ์๋ก ์ค์ฝํ์ฒด์ด๋์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง, ๋๋ฒ์งธ ์ฝ๋๋ ๋ชจ๋ ํจ์๋ค์ด ๊ธ๋ก๋ฒ์์ ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ํจ์ํธ์ถ์ด ๋ค๋ฅธ ํจ์ ์์์ ์ด๋ฃจ์ด์ก๋ค๊ณ ํด๋ ์ ์ธ๋ ๊ณณ์ ๊ธฐ์ค์ผ๋ก ์์ ์ค์ฝํ๋ ๋ชจ๋ ๊ธ๋ก๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ถ์์ง ์์์ food๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ ๊ธ๋ก๋ฒ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ค. ์ด๋ ๊ธฐ ๋๋ฌธ์ ์ค์ฝํ์ฒด์ด๋ ๋ฒ์๊ฐ ์ฒซ๋ฒ์งธ ์ฝ๋์ ๋ค๋ฅด๊ฒ ๋๊ณ ๊ฒฐ๊ณผ๊ฐ์ด ๋ค๋ฅด๊ฒ ๋๋ค.
์์ง ์คํ ์ปจํ ์คํธ์ ๋ํด์ ์์์ผํ ๋ด์ฉ๋ค์ด ๋ง์ ๊ฒ ๊ฐ๋ค. ๋ ๊ณต๋ถํ๊ณ ํ์คํ๊ฒ ์ ๋ฆฌํด๋ณด์.
'javascript, node' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํค ์ํ์ผ๋ก ์ด๋ฒคํธ ์ฃผ๊ธฐ(onKeyPress) (0) | 2022.01.13 |
---|---|
์ค์ฝํ(scope)๋? (0) | 2022.01.04 |
์คํ ์ปจํ ์คํธ(Execution Context) - Record (0) | 2021.12.28 |
javascript ++์ฐ์ฐ์ (0) | 2021.11.27 |
Event Loop๊ฐ ๋ฌด์์ผ๊น? (0) | 2021.11.16 |
๋๊ธ