2022. 4. 7. 23:51ใjavascript
์๋ฐ์คํฌ๋ฆฝํธ - ํด๋ก์
์๋ฐ์คํฌ๋ฆฝํธ์์ ํด๋ก์ ๋ "ํจ์์ ๊ทธ ํจ์๊ฐ ์ ์ธ๋์ ๋ ๋ ์์ปฌ ํ๊ฒฝ๊ณผ์ ์กฐํฉ์ด๋ค."
MDN docs์ ์์๋ฅผ ๋ณด๋ฉด์ ์ ๋ง์ ์๋ฏธ๋ฅผ ํ๊ตฌํด๋ณด์.
makeFunc()ํจ์๋ ๋ด๋ถ์ displayName()ํจ์๋ฅผ ๋ฆฌํดํ๋ ํจ์์ด๊ณ ์ด๋ฅผ myFunc๋ผ๋ ๋ณ์๊ฐ ๋ฆฌํด์ ๋ฐ๊ฒ ๋๋ค.
๊ฒฐ๊ตญ์ myFunc๊ฐ displayNameํจ์๋ฅผ ๊ฐ๊ฒ ๋๋๋ฐ ์ด๋ myFunc๋ฅผ ์คํํ๋ฉด makeFunc๋ด๋ถ์ ๋ณ์ name์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
์์์ ์ผ๋ก๋ ํจ์๊ฐ ์ข ๋ฃ๋๋ค๋ฉด ๊ทธ ํจ์์ ๋ณ์์๋ ์ฐธ์กฐํ ์ ์๋ ๊ฒ์ด ๋ง์ํ ๋ฐ ์ด ๊ตฌ์กฐ์์๋ ํจ์๊ฐ ์ข ๋ฃ๋์ด๋ ์ด๋ ํ ๋ณ์์ ์ํด์ ์ฐธ์กฐ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์ข ๋ฃ๋ ํจ์์ ๋ณ์์๋ ์ฐธ์กฐํ ์ ์๊ฒ ๋๋ค.
์ฆ "์ธ๋ถํจ์๊ฐ ์ข ๋ฃ๋์ด๋ ์ฐธ์กฐ๋ง ๋๋ค๋ฉด ๊ทธ ํจ์ ๋ด๋ถ์ ๊ฐ๋ค์ ๊ณ์ํด์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ"์ด๋ค. ์ด๋ฅผ ํด๋ก์ ๋ผ๊ณ ํ๋ค.
๋ค์ ํจ์์ ๊ทธ ํจ์๊ฐ ์ ์ธ๋์ ๋์ ๋ ์์ปฌ ํ๊ฒฝ๊ณผ์ ์กฐํฉ์ด๋ผ๋ ๋ฌธ์ฅ์ ์ดํด๋ณด๋ฉด ํจ์๋ "๋ด๋ถํจ์"๋ฅผ ์๋ฏธํ๊ณ "๋ด๋ถํจ์๊ฐ ์ ์ธ๋์ ๋์ ๋ ์์ปฌ ํ๊ฒฝ"์ ์์ ์์์์ name๊ณผ๊ฐ์ ๋ณ์์ ์ ๊ทผํ ์ ์๋ ํ๊ฒฝ์ ์๋ฏธํ๋ค.
ํ๋ ์ดํ๋ฅผ ์ง๊ณ ๊ฐ๋ฉด ํด๋ก์ ์ ์ํด ์ฐธ์กฐ๋๋ ์ธ๋ถํจ์์ ๋ณ์๋ฅผ ์์ ๋ณ์๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์์ ์์์์๋ name์ด ์์ ๋ณ์์ด๋ค.
๊ทธ๋ผ ํด๋ก์ ๋ ์ ์ฌ์ฉํ ๊น
๊ฐ์ธ์ ์ผ๋ก ํด๋ก์ ๋ ๋ ๊ฐ์ง ์ด์ ์์ ๊ฐ์ฅ ํฐ ํ์ ๋ฐํํ๋ค๊ณ ์๊ฐํ๋ค.
1. ์ ์ญ ๋ณ์ ์ฌ์ฉ์ ์ต์
์๋ ์์๋ฅผ ์ดํด๋ณด์.
๋จ์ํ sum์ num์ ๋ํ๋ ์์ ์ด๋ค. ์ฌ๊ธฐ์ sum์ ์ ์ญ๋ณ์๋ก ์ฌ์ฉ๋๊ณ ์๋๋ฐ ์ด๋ฅผ ํด๋ก์ ๋ฅผ ํตํด์ ์์ ๋ณด์.
ํด๋ก์ ๋ฅผ ํตํด์ ์ ์ญ๋ณ์๋ฅผ ์์ด๋ค. ์ด๋ ๋งค์ฐ ๊ฐ๋ ฅํ ๋์์ด๋ค.
๋ณ์์ ๊ฐ์ ์ธ์ ๋ ์ง ๋ณ๊ฒฝ์ด ๋ ์ ์๋๋ฐ ์ด๋ฌํ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ต๋ํ ์ง์ํ๋ ๊ฒ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์ ์์ ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๊ณ ๋งํ ์ ์๋ค. ์ด๋ฌํ ์ธก๋ฉด์์ ํด๋ก์ ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด๋ค.
2. ์ ๋ณด์ ์๋
์์ ๋น์ทํ ๋งฅ๋ฝ์ธ๋ฐ, ๊ฒฐ๊ตญ ์์ ๋ณ์๋ ์ด์์์ง๋ง ์ด๋ฅผ ์ง์ ์ ์ผ๋ก ์กฐ์ํ ์๋ ์๊ฒ ๋๋ค. ํ์ง๋ง ์์ ์์์์ examAdd๋ฅผ ํตํ๋ฉด ๋ด๋ถ์ ์กด์ฌํ๋ ํจ์๋ฅผ ์ด์ฉํ ์ ์์ผ๋ ์ด๋ ํด๋์ค ๊ธฐ๋ฐ์ธ์ด์ privateํ ๋ถ๋ถ๊ณผ ์ ์ฌํ๋ค๊ณ ๋ณผ ์ ์๋ค.
ํด๋ก์ ์์์ for๋ฌธ (with var)
for๋ฌธ๊ณผ varํ์ ์ ๊ฐ์ด ์ฌ์ฉํ๋ค๋ฉด ์๋์น์์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. ์๋ ์์๋ฅผ ์ดํด๋ณด์.
Input
output
0,1,2,3,4๋ฅผ ์์ํ์ง๋ง 5๋ง ๋์ค๋ ๊ฑธ ๋ณผ ์ ์๋ค.
์ด๋ i๊ฐ ์ ์ญ๋ณ์์ด๊ธฐ ๋๋ฌธ์ ํจ์๊ฐ ์คํ๋ ๋ i๊ฐ 5๊น์ง ๊ฐ์ํ์ ๊ฐ์ returnํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋์์ผ๋ก๋ ES6์ letํค์๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
let์ ์ฌ์ฉํ๋ฉด var๋ฅผ let์ผ๋ก๋ง ๊ณ ์ณ์ค์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. let์ด ์ง์ญ๋ณ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์๊ฐ ์๋ชป ์ดํดํ ๊ฑธ์๋ ์๊ฒ ์ง๋ง ๋ํ ์ผํ ๋ด์ฉ์ ์ข ๋ ์ดํด๋ณด์. (์๋๋ผ๋ฉด ๋๊ธ ๋ถํํฉ๋๋ค)
์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๋ ์ ์ธ๋ ๋์ ๋ณ์๋ฅผ ๊ธฐ์ตํ๋ค. ์ฆ i๋ ์ ์ญ๋ณ์์ด๊ธฐ ๋๋ฌธ์ 0~4๊น์ง ์ง๋์น ๊ฐ์ธ 5๊ฐ ๋ด๊ธฐ๊ฒ ๋๋ค. ํ์ง๋ง let๊ฐ์ ๊ฒฝ์ฐ์๋ ์ง์ญ๋ณ์๊ธฐ ๋๋ฌธ์ ํจ์๊ฐ ์ ์ธ๋ ๋ 0,1,2,3,4 ๊ฐ๊ฐ ๋ด๊ธฐ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋ค์์ ํด๋ก์ ๋ฅผ ์ด์ฉํด์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
Input
output
Input์ ์ดํด๋ณด๋ฉด ์ต๋ช ํจ์๋ฅผ ํตํด์ ํจ์๋ฅผ ๋ฐ๋ก ์คํ์ํค๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ฅผ ํตํด์ ํจ์๋ฅผ ๋ฆฌํดํ๊ฒ ๋๋๋ฐ ์ด๋ ์ธ์๋ก ๋ฐ๊ฒ๋๋ id๋ ์์ ๋ณ์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ธฐ์ตํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
Reference
https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures
https://poiemaweb.com/js-closure
'javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์คํฌ๋ฆฝํธ - this, bind (0) | 2022.05.07 |
---|