๐ก ๋ ์์ปฌ ์ค์ฝํ : ๋ณ์์ ์ ํจ ๋ฒ์๋ฅผ ๊ฒฐ์ ํ๋ ๊ท์น ์ค ํ๋์ด๋ค.
- ์ค์ฝํ๋ ํจ์๋ฅผ ํธ์ถํ ๋๊ฐ ์๋ ์ ์ธํ ๋ ์๊ธด๋ค.
- ํจ์ ์ธ๋ถ์์๋ ํจ์ ๋ด๋ถ์์ ์ ์ธ๋ ๋ณ์์ ์ ๊ทผํ ์ ์๋ค.
- ์ ์ ์ค์ฝํ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
๋ ์์ปฌ ์ค์ฝํ(lexical scoping)
๋ง์ด๋ค ํท๊ฐ๋ฆฌ๋ ๊ฐ๋ ์ธ๋ฐ ์ค์ฝํ๋ ํจ์๋ฅผ ํธ์ถํ ๋๊ฐ ์๋๋ผ ์ ์ธํ ๋ ์๊ธด๋ค.
ํธ์ถ์ด ์๋๋ผ ์ ์ธ! ์ ์ ์ค์ฝํ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
๋ค์ ์ฝ๋์์ console์ด ์ด๋ป๊ฒ ์ฐํ์ง ์์ํด ๋ณด๊ธฐ
var name = 'zero';
function log() {
console.log(name);
}
function wrapper() {
var name = 'nero';
log();
}
wrapper();
์ ๋ต: zero
- ์ค์ฝํ๋ ํจ์๋ฅผ ์ ์ธํ ๋ ์๊ธด๋ค.
- log ์์ name์ wrapper ์์ ์ง์ญ๋ณ์ name์ด ์๋๋ผ, ์ ์ญ๋ณ์ name์ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ์ด๋ค.
- ์ด๋ฐ ๊ฒ์ lexical scoping์ด๋ผ๊ณ ํ๋ค.
- ํจ์๋ฅผ ์ฒ์ ์ ์ธํ๋ ์๊ฐ, ํจ์ ๋ด๋ถ์ ๋ณ์๋ ์๊ธฐ ์ค์ฝํ๋ก๋ถํฐ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณณ(์์ ๋ฒ์์์)์ ์๋ ๋ณ์๋ฅผ ๊ณ์ ์ฐธ์กฐํ๊ฒ ๋๋ค.
- ์์ ์์์์๋ log ํจ์ ์์ name ๋ณ์๋ ์ ์ธ ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ญ๋ณ์ name์ ์ฐธ์กฐํ๊ฒ ๋๋ค.
- ๊ทธ๋์ wrapper ์์์ log๋ฅผ ํธ์ถํด๋ ์ง์ญ๋ณ์ name='nero'๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ ์๋๋ผ
- ๊ทธ๋๋ก ์ ์ญ๋ณ์ name์ ๊ฐ์ธ zero๊ฐ ๋์จ๋ค.
log ํจ์๊ฐ ํ ๋ฒ ์ ์ธ๋ ์ด์, ์ ์ญ๋ณ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋์ด์๋ name ๋ณ์๊ฐ ๋ค๋ฅธ ๊ฑธ ๊ฐ๋ฆฌํค๊ฒ ํ ์ ์๋ค.
์ ์ญ๋ณ์๋ฅผ ๋ง๋๋ ์ผ์ ์ง์ํด์ผ ํ๋ ์ด์ ๋ ๋ณ์๊ฐ ์์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
'Frontend > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฉ์ผ ์ฃผ์์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ธฐ ์ํ ์ ๊ท ํํ์(Regex) ํจํด์ ์ ๊ณตํ๋ ์ฌ์ดํธ (0) | 2024.09.25 |
---|---|
for...of์ forEach ์ฐจ์ด (0) | 2024.08.06 |
์ค์ฝํ ์ฒด์ธ (0) | 2024.05.08 |
ํด๋ก์ (0) | 2024.04.13 |
์คํ ์ปจํ ์คํธ (0) | 2024.03.23 |