ํด๋ก์ ๊ฐ ๋ญ์์?
์ด๋ค ํจ์์์ ์ ์ธํ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ๋ด๋ถ ํจ์๋ฅผ ์ธ๋ถ๋ก ์ ๋ฌํ ๊ฒฝ์ฐ ํจ์์ ์คํ ์ปจํ ์คํธ๊ฐ ์ข ๋ฃ๋ ํ์๋ ํด๋น ๋ณ์๊ฐ ์ฌ๋ผ์ง์ง ์๋ํ์์ ๋งํฉ๋๋ค.
ํด๋ก์
์ด๋ค ํจ์์์ ์ ์ธํ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ๋ด๋ถ ํจ์๋ฅผ ์ธ๋ถ๋ก ์ ๋ฌํ ๊ฒฝ์ฐ,
(์ธ๋ถ)ํจ์์ ์คํ ์ปจํ ์คํธ๊ฐ ์ข ๋ฃ๋ ํ์๋ ํด๋น ๋ณ์๊ฐ ์ฌ๋ผ์ง์ง ์๋ ํ์
var outer = function () {
var a= 1;
var inner= function() {
return ++a;
}
return inner; // - 1. ๊ฐ์ด ์๋ ํจ์ ์์ฒด๋ฅผ ์ ๋ฌ
}
var outer2 = outer(); // - 2. fooํจ์์ ์คํ์ปจํ
์คํธ ์ข
๋ฃ
console.log(outer2()); // 2 - 3. ์์ ๋ฐํ ๋ inner๊ฐ ์คํ๋จ
console.log(outer2()); // 3
- foo๋ ํจ์์ ์คํ ๊ฒฐ๊ณผ๊ฐ ์๋ ํจ์ ์์ฒด๋ฅผ ๋ฐํํจ (inner)
- fooํจ์์ ์คํ์ปจํ ์คํธ๊ฐ ์ข ๋ฃ๋์์์๋
- ์์ ๋ฐํ๋ innerํจ์๊ฐ ์คํ๋จ
๊ทธ ์ด์ ๋?
innerํจ์๋ ๋ด๋ถ์์ ์ ์ธ๋์์ : outerํจ์์๋ ์์ปฌ ํ๊ฒฝ์ ๋ด๊น
์ค์ฝํ ์ฒด์ด๋์ ๋ฐ๋ผ outer์์ ์ ์ธํ ๋ณ์ a์ ์ ๊ทผํ๊ฒ ๋จ
๊ทผ๋ฐ ์ด๋ป๊ฒ ์ ๊ทผํ๋ ๊ฑฐ์์?
๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋์ ๋ฐฉ์ ๋๋ฌธ์ ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ด๋ค ๊ฐ์ ์ฐธ์กฐํ๋ ๋ณ์๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ๊ทธ ๊ฐ์ ์์ง ๋์์ ํฌํจํ์ง ์์
๋ฐ๋ผ์ outer ํจ์์ ์คํ์ด ์ข ๋ฃ๋๋๋ผ๋ ๋ด๋ถ ํจ์์ธ inner ๋ก ์ธํด a๋ฅผ ํธ์ถํ ๊ฐ๋ฅ์ฑ์ด ์๊ณ
๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ด ๊ฐ์ ์์งํ์ง ์๋๋ค
ํด๋ก์ ์ ๋ค์ํ ์ ์
ํจ์์์ ์ ์ธํ ๋ณ์๋ฅผ ๋ด๋ถ ํจ์์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ์ํ๋ ํ์์ผ๋ก,
์ธ๋ถ ํจ์์ ์๋ช ์ฃผ๊ธฐ๊ฐ ์ข ๋ฃ๋๋๋ผ๋, ์ค์ฝํ ์ฒด์ธ์ ์ํด ํด๋น ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
ํจ์๋ฅผ ์ ์ธํ ๋ ๋ง๋ค์ด์ง๋ ์ ํจ๋ฒ์๊ฐ ์ฌ๋ผ์ง ํ์๋ ํธ์ถํ ์ ์๋ ํจ์ - < ์๋ฐ์คํฌ๋ฆฝํธ ๋์ ๋น๊ธ> , ์กด๋ ์
์ด๋ฏธ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋๋ ์ธ๋ถ ํจ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ํจ์ - < ์ธ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ >, ์กํ์ฃผ ๊ณ ํ์ค
์์ ์ด ์์ฑ๋ ๋์ ์ค์ฝํ์์ ์ ์ ์์๋ ๋ณ์๋ค ์ค ์ธ์ ๊ฐ ์์ ์ด ์คํ๋ ๋ ์ฌ์ฉํ ๋ณ์๋ง์ ๊ธฐ์ตํ์ฌ ์ ์ง์ํค๋ ํจ์ - < ํจ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ >, ์ ์ธ๋
- ํด๋น ๋ด์ฉ์ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฉ์ ์ฐธ์กฐํ์ต๋๋ค. -
'๐ JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JavaScript์ this์ ๋ฐ์ธ๋ฉ , ํ์ดํํจ์๊ฐ ์๊ฒจ๋๊ฒ ๋ ๋ฐฐ๊ฒฝ (0) | 2022.06.22 |
---|---|
JavaScript replace์ ๋ณ์ ํ์ฉํ๊ธฐ - ์ ๊ทํํ์ (regExp) ์ด์ฉ (0) | 2022.05.17 |
[JS Tam9์ํ] #9 ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ ์ปจํ ์คํธ (0) | 2021.08.25 |
[JS Tam9์ํ] #8 ์๋ฐ์คํฌ๋ฆฝํธ์ this ๋? (0) | 2021.08.11 |
[JS Tam9์ํ] #7 ๋นํธ์ธ ๊ฐ์ฒด (0) | 2021.08.09 |
๋๊ธ