ํด๋ก์ ๋ ์ค์ํ ๊ฐ๋
์
๋๋ค. ๋น๋จ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฟ๋ง ์๋, ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ทจ๊ธํ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ด์ฃ . ํด๋ก์ ๋ ๋จ์ ์ผ๋ก ๋งํ์๋ฉด, ํจ์๊ฐ ์ ์ธ๋์ ๋์ ๋ ์์ปฌ ํ๊ฒฝ(Lexical environment)์
๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํจ์๋ฅผ ์ด๋์ ์ ์ํ๋์ง์ ๋ฐ๋ผ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ฉฐ, ์ด๋ฅผ ๋ ์์ปฌ ์ค์ฝํ(์ ์ ์ค์ฝํ)๋ผ๊ณ ํฉ๋๋ค.
์ด๋ฏธ ์ค์ฝํ์์ ๋ค๋ฃฌ ๋ด์ฉ์ ๋๋ค. ์๋ ์ฝ๋๋ฅผ ๋ณผ๊น์?
const x = 1;
function outer(){
const x = 10;
inner();
}
function inner(){
console.log(x);
}
outer(); // 1
inner(); // 2outer์ inner ํจ์์ ์์ ์ค์ฝํ๋ ์ ์ญ์
๋๋ค. ํจ์๋ฅผ ์ด๋์์ ํธ์ถํ๋์ง๋ ํจ์์ ์์ ์ค์ฝํ์ ์ด๋ค ์ํฅ๋ ๋ฏธ์น์ง ์์ต๋๋ค. ์ฆ, ์ ์ ์ผ๋ก ๊ฒฐ์ ๋๊ณ ๋ณํ์ง ์๋๋ค๋ ๊ฒ์ด์ฃ . ์ค์ฝํ์ ์ค์ฒด๋ ์คํ ์ปจํ
์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ด๋ฉฐ, ๋ ์์ปฌ ํ๊ฒฝ์ ์์ ์ ์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ๋ฅผ ํตํด ์์ ๋ ์์ปฌ ํ๊ฒฝ๊ณผ ์ฐ๊ฒฐ๋๋ ์ด๊ฒ์ด ์ค์ฝํ ์ฒด์ธ(Scope Chainner) ์
๋๋ค.
๊ฒฐ๊ตญ ๋ ์์ปฌ ์ค์ฝํ๋ ๋ ์์ปฌ ํ๊ฒฝ์ ์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ์ ์ ์ฅํ ์ฐธ์กฐ ๊ฐ(์์ ์ค์ฝํ์ ๋ํ ์ฐธ์กฐ)์ ํจ์๊ฐ ํ๊ฐ๋๋ ์์ ์ ํจ์๊ฐ ์ ์๋ ํ๊ฒฝ(์์น)์ ์ํด ๊ฒฐ์ ๋๋ ๊ฒ์ ๋๋ค.
ํจ์๋ ์์ ์ ๋ด๋ถ ์ฌ๋กฏ
[[Environment]]์ ์์ ์ด ์ ์๋ ํ๊ฒฝ์ธ ์์ ์ค์ฝํ์ ์ฐธ์กฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
ํจ์๊ฐ ์ ์๋ ํ๊ฒฝ(์์น)๊ณผ ํธ์ถ๋๋ ํ๊ฒฝ(์์น)๋ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ์์ปฌ ์ค์ฝํ๋ ์์ ์ด ์ ์๋ ํ๊ฒฝ์์์ ์์ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํด์ผ ํ๋๋ฐ, ์ด ๋ ์์ ์ ๋ด๋ถ ์ฌ๋กฏ์ธ [[Environment]]์ ์์ ์ค์ฝํ์์ฐธ์กฐ๋ฅผ ์ ์ฅํ๊ณ , ์ด๋ ํ์ฌ ์คํ ์ค์ธ ์คํ ์ปจํ
์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
๊ทธ ์ด์ ๋ ํจ์ ์ ์๊ฐ ํ๊ฐ๋์ด ํจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์์ ์ ์์ ํจ์(๋๋ ์ ์ญ ์ฝ๋)๊ฐ ํ๊ฐ๋๊ณ ์คํ๋๋ ์์ ์ด๊ณ , ์คํ ์ปจํ
์คํธ๋ ์์ ํจ์(๋๋ ์ ์ญ ์ฝ๋)์ด๊ธฐ ๋๋ฌธ์ด์ฃ . ๊ฒฐ๊ตญ ํจ์ ๊ฐ์ฒด์ ๋ด๋ถ ์ฌ๋กฏ [[Environment]]์ ์ ์ฅ๋ ํ์ฌ ์คํ ์ค์ธ ์คํ ์ปจํ
์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ ์ฐธ์กฐ๊ฐ ๋ฐ๋ก ์์ ์ค์ฝํ๊ฐ ๋๋ ๊ฒ์
๋๋ค.
ํจ์๊ฐ ํธ์ถ๋๋ฉด ํจ์ ๋ด๋ถ๋ก ์ฝ๋์ ์ ์ด๊ถ(Control)์ด ์ด๋ํ๊ณ , ํจ์๋ฅผ ์๋์ ์์๋๋ก ํ๊ฐํฉ๋๋ค.
- ํจ์ ์คํ ์ปจํ ์คํธ ์์ฑ
- ํจ์ ๋ ์์ปฌ ํ๊ฒฝ ์์ฑ
- ํจ์ ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ
- this ๋ฐ์ธ๋ฉ
์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํจ ์ฐธ์กฐ ๊ฒฐ์
์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ์๋ ํจ์ ๊ฐ์ฒด ๋ด๋ถ ์ฌ๋กฏ [[Environment]]์ ์ ์ฅ๋ ๋ ์์ปฌ ํ๊ฒฝ์ ์ฐธ์กฐ๊ฐ ํ ๋น๋๊ณ , ์ด๋ ํจ์์ ์์ ์ค์ฝํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ํจ์ ์ ์ ์์น์ ๋ฐ๋ผ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ ๋ ์์ปฌ ์ค์ฝํ์
๋๋ค. ์, ์ฌ๊ธฐ๊น์ง ๊ณ ์ํ์
จ์ด์. ์ด์ ํด๋ก์ ๋ฅผ ์์๋ด
์๋ค.
์ธ๋ถ ํจ์๋ณด๋ค ๋ ์ค๋ ์ ์ง๋์ด ์ธ๋ถ ํจ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ ๋ด๋ถ ํจ์๋ฅผ ํด๋ก์ (Closure)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ฝ๋์ ํ๋ฆ๋๋ก ์ดํดํด๋ณด์ฃ . ํจ๊ณผ์ ์ธ ์ดํด๋ฅผ ์ํด ํจ์ ํํ์์ผ๋ก ์์ฑํ์ต๋๋ค.
const x = 1;
function outer(){
const x = 10;
return function() {
console.log(x);
};
}
const exec = outer(); // ํจ์ ํธ์ถ
exec(); // 10const exec = outer();๋ก outer ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ต๋ช ํจ์๋ฅผ ๋ฐํํ๊ณ outer ํจ์๋ ์ข ๋ฃ๋์ด ์คํ ์ปจํ ์คํธ ์คํ์์ ์ ๊ฑฐ(pop)๋ฉ๋๋ค.- outer ํจ์์ ์คํ ์ปจํ
์คํธ๊ฐ ์ ๊ฑฐ๋์์ผ๋ฏ๋ก ์ง์ญ ๋ณ์
const x = 10;์ ๋น์ฐํ ์ข ๋ฃ๋ฉ๋๋ค. - ์ ํจํ์ง ์๊ฒ ๋ ์ง์ญ ๋ณ์ x์ ๊ฐ์ด๋ฏ๋ก, ์คํ ๊ฒฐ๊ณผ๋ 1์ด ๋์ด์ผ ํ๋ค๊ณ ์ ํฌ๋ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ์คํ ๊ฒฐ๊ณผ๋ outer ํจ์์ ์ง์ญ ๋ณ์ x์ ๊ฐ์ธ 10์ด ์ถ๋ ฅ๋ฉ๋๋ค. ์ด์ฒ๋ผ ๋ด๋ถ ํจ์๊ฐ ์ธ๋ถํจ์๋ณด๋ค ์ค๋ ์ ์ง๋๋ ๊ฒฝ์ฐ, ๋ด๋ถ ํจ์๋ ์ข
๋ฃ๋ ์ธ๋ถ ํจ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๊ฒ ๋๊ณ ์ด๋ฅผ ํด๋ก์ ๋ผ ๋ถ๋ฆ
๋๋ค.
outer ํจ์๊ฐ ํธ์ถ๋์ด ๋ด๋ถ ํจ์๊ฐ ํ๊ฐ๋๋ฉด ๋ฐํ๊ฐ์ผ๋ก ์ ์๋ ์ต๋ช
ํจ์๋ ์์ ์ ๋ด๋ถ ์ฌ๋กฏ [[Environment]]์ ํ์ฌ ์คํ ์ค์ธ ์คํ ์ปจํ
์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ธ outer ํจ์์ ๋ ์์ปฌ ํ๊ฒฝ์ ์์ ์ค์ฝํ๋ก ์ง์ ํฉ๋๋ค.
outer ํจ์์ ์คํ์ด ์ข ๋ฃ๋์ด ์คํ ์ปจํ ์คํธ ์คํ์ด ์ ๊ฑฐ๋๋ค๊ณ outer ํจ์์ ๋ ์์ปฌ ํ๊ฒฝ๊น์ง ์๋ฉธํ๋ ๊ฒ์ด ์๋์์. ์ด๋ฅผ ์ค๋ช ํ๊ธฐ ์ ์, ํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํ์ํ๊ณ -์ธ๊ธฐ(Mark-and-sweep) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ Garbage Collection์ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ ์์๋์๋ฉด ์ดํดํ๊ธฐ ์ฌ์์ง๋๋ค.
์ ๋ฆฌํ์๋ฉด, outer ํจ์์ ๋ ์์ปฌ ํ๊ฒฝ์ ํ์ฌ ๋ฐํ๋ ์ต๋ช
ํจ์์ ๋ด๋ถ ์ฌ๋กฏ [[Environment]]์ด ์ฐธ์กฐํ๊ณ ์์ผ๋ฉฐ, ์ด๋ ์ ์ญ ๋ณ์ exec์ ํ ๋นํ์ผ๋ฏ๋ก Garbage Collection์ ๋์์ด ๋์ง ์๋ ๊ฒ์
๋๋ค. Garbage Collector๋ ์ฐธ์กฐ๋๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง์๋๋ก ์ ๊ฑฐํ์ง ์๋ ๊ฒ์ด์ฃ !
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ํจ์๋ ์์ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํ๊ธฐ ๋๋ฌธ์ ์ด๋ก ์ ์ผ๋ก๋ ๋ชจ๋ ํด๋ก์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก๋ ๋ชจ๋ ํจ์๋ฅผ ํด๋ก์ ๋ผ๊ณ ํ์ง ์์ฃ . ๋ค์ ์์ ๋ฅผ ๋ณผ๊น์?
const x = 1;
function outer(){
const y = 10; // * ์ด ๋ถ๋ถ๋ง ๋ค๋ฆ
๋๋ค.
return function() {
console.log(x);
};
}
const exec = outer(); // ํจ์ ํธ์ถ
exec(); // 1์์ ๋ฅผ ์ดํดํ๊ธฐ ์ ์ ์๊ฐํด์ผ ํ ๊ฒ์ด ์์ต๋๋ค. ๋ชจ๋ ์์ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํ๋ ค๋ฉด ๋ธ๋ผ์ฐ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฑ๋ฅ์ด ๋งค์ฐ ์ ํ๋๊ฒ ์ฃ ? ์, ์์ ์์ ์์๋ ๋ฐํ๋ ์ต๋ช ํจ์๋ ์ธ๋ถ ํจ์๋ณด๋ค ์ค๋ ์ ์ง๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ ์ค์ฝํ์ y ๋ณ์๋ฅผ ์ฐธ์กฐํ์ง ์์ผ๋ฏ๋ก ๋ฐํ๋ ์ต๋ช ํจ์์ ์ฐธ์กฐ๋ ๊ณง๋ฐ๋ก ์๋ฉธํฉ๋๋ค. ์ด์ฒ๋ผ ๋๋ถ๋ถ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ ์ต์ ํ๋ฅผ ํตํด ์์ ์ค์ฝํ์ ์ด๋ค ์๋ณ์๋ ์ฐธ์กฐํ์ง ์๋ ๊ฒฝ์ฐ ์์ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํ์ง ์์ต๋๋ค. ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ต์ ํ๊ฐ ๋งค์ฐ ์ ๋์ด ์์ด์. ํด๋ก์ ๊ฐ ์ฐธ์กฐํ๊ณ ์์ง ์์ ์๋ณ์๋ ๊ธฐ์ตํ์ง ์์ต๋๋ค. ๊ธฐ์ตํด์ผ ํ ์๋ณ์๋ง์ ๊ธฐ์ตํ๋ค๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ผ๊ณ ํ ์ ์์ฃ .
์ฌ๋ด์ผ๋ก ํด๋ก์ ์ ์ํด ์ฐธ์กฐ๋๋ ์์ ์ค์ฝํ์ ๋ณ์๋ฅผ ์์ ๋ณ์(Free Variable)๋ผ ๋ถ๋ฅด๋ฉฐ ํด๋ก์ ๋ฅผ ์์ ๋ณ์์ ๋ฌถ์ฌ์๋ ํจ์๋ผ๊ณ ์์ญํ ์ ์์ต๋๋ค.
์ํ(State)๋ฅผ ์์ ํ๊ฒ ์๋ํ๊ณ ํน์ ํจ์์๊ฒ๋ง ์ํ ๋ณ๊ฒฝ์ ํ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
์บก์ํ(Encapsulation)๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋กํผํฐ์ ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ๊ณ ์กฐ์ํ๋ ๋์์ธ ๋ฉ์๋๋ฅผ ํ๋๋ก ๋ฌถ๋ ๊ฒ์ ๋๋ค. ๋ง์น ์บก์์ฒ๋ผ ์ฐ๊ธฐ ํธํด์ง์ฃ . ์ฌ๊ธฐ์๋ ํน์ ํ๋กํผํฐ, ๋ฉ์๋๋ฅผ ์จ๊ธธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ ํ๋ฉฐ ์ด๋ฅผ ์ ๋ณด ์๋(Information Hiding)์ด๋ผ๊ณ ํฉ๋๋ค. ์ ๋ณด๋ฅผ ์จ๊ธด๋ค๋ ๊ฒ์ ๊ตฌํํ ๊ฐ์ฒด์ ๋ด๋ถ๋ฅผ ๊ณต๊ฐํ์ง ์์ผ๋ฏ๋ก ์ธ๋ถ์ ์ณ์ง ๋ชปํ ์ ๊ทผ์ผ๋ก๋ถํฐ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ ์ ๋ณด๋ฅผ ๋ณดํธํ๊ณ ๊ฐ์ฒด ๊ฐ ์ํธ ์์กด์ฑ(๊ฒฐํฉ๋, Coupling)์ ๋ฎ์ถ๋ ํจ๊ณผ๊ฐ ์์ฃ .
๊ทธ๋ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ๋ณด ์๋์ ์์ ํ๊ฒ ์ง์ํ์ง ์์์... ์๋์ ๊ฐ์ด ํ๋ด๋ง ๋ผ ์ ์์ฃ . ์ด๋ด ๋ ํด๋ก์ ๊ฐ ๋งค์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
// ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ๊ณ ํจ์๋ฅผ ๋ฐํํ๋ ๊ณ ์ฐจ ํจ์
// ์์ ๋ณ์ counter๋ฅผ ๊ธฐ์ตํ๋ ํด๋ก์ ๋ฅผ ๋ฐํํฉ๋๋ค.
function makeCounter(predicate) {
// ์นด์ดํธ ์ํ๋ฅผ ์ ์งํ๋ ์์ ๋ณ์
let counter = 0;
// ํด๋ก์ ๋ฐํ
return function () {
// ์ธ์๋ก ์ ๋ฌ ๋ฐ์ ๋ณด์กฐ ํจ์์ ์ํ ๋ณ๊ฒฝ ์์
counter = predicate(counter);
return counter;
};
}
// ๋ณด์กฐ ํจ์
function increase(n) {
return ++n;
}
// ๋ณด์กฐ ํจ์
function decrease(n) {
return --n;
}
// ํจ์๋ก ํจ์๋ฅผ ์์ฑํฉ๋๋ค.
// makeCounter ํจ์๋ ๋ณด์กฐ ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ํจ์๋ฅผ ๋ฐํํฉ๋๋ค.
const increaser = makeCounter(increase);
console.log(increaser()); // 1
console.log(increaser()); // 2
// increaser ํจ์์๋ ๋
๋ฆฝ๋ ๋ ์์ปฌ ํ๊ฒฝ์ด๋ฏ๋ก ๋ด๋ถ ์ํ๊ฐ ์ฐ๋๋์ง ์์ต๋๋ค.
const decreaser = makeCounter(decrease);
console.log(decreaser()); // -1
console.log(decreaser()); // -2makeCounter ํจ์๋ ๊ณ ์ฐจ ํจ์์ ๋๋ค. ์ด ํจ์๊ฐ ๋ฐํํ๋ ๊ฒ์ ์์ ์ด ์์ฑ๋ ๋ ์์ปฌ ํ๊ฒฝ์ธ makeCounter ํจ์ ์ค์ฝํ์ counter ๋ณ์๋ฅผ ๊ธฐ์ตํ๋ ํด๋ก์ ์ฃ . ์ฝ๋๋ก ๋ณด๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ด์ด์ง์ง ์์ฃ ? ์ด๋ makeCounter ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ฐํ๋ ํจ์๋ ์์ ๋ง์ ๋ ๋ฆฝ๋ ๋ ์์ปฌ ํ๊ฒฝ์ ๊ฐ๋ ๊ฒ์ ๋๋ค. ์ฆ, ํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค ์๋ก์ด makCounter ํจ์์ ์คํ ์ปจํ ์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ด ์์ฑ๋๋ ๊ฒ์ด์ฃ .
์ด์ฒ๋ผ ํด๋ก์ ๋ ์ํ(State)๊ฐ ์๋์น ์๊ฒ ๋ณ๊ฒฝ๋์ง ์๋๋ก ์์ ํ๊ฒ ์ ๋ณด๋ฅผ ์๋ํ๊ณ ํน์ ํจ์์๊ฒ๋ง ์ํ ๋ณ๊ฒฝ์ ํ์ฉํ ์ ์์ต๋๋ค.
๋ง์ฝ ์์ ์์ ์์ ์ํ๋ฅผ ๊ณต์ (Share) ํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑํด๋ด ๋๋ค.
// ํจ์๋ฅผ ๋ฐํํ๋ ๊ณ ์ฐจ ํจ์
// ์์ ๋ณ์ counter๋ฅผ ๊ธฐ์ตํ๋ ํด๋ก์ ๋ฅผ ๋ฐํํฉ๋๋ค.
const counter = (function () {
// ์นด์ดํธ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํ ์์ ๋ณ์
let counter = 0;
// ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ๋ ํด๋ก์ ๋ฐํ
return function (predicate) {
// ์ธ์๋ก ์ ๋ฌ ๋ฐ์ ๋ณด์กฐ ํจ์์ ์ํ ๋ณ๊ฒฝ์ ์์ํฉ๋๋ค.
counter = predicate(counter);
return counter;
};
}());
// ๋ณด์กฐ ํจ์
function increase(n) {
return ++n;
}
// ๋ณด์กฐ ํจ์
function decrease(n) {
return --n;
}
// ๋ณด์กฐ ํจ์๋ฅผ ์ ๋ฌํ์ฌ ํธ์ถํฉ๋๋ค.
console.log(counter(increase)); // 1
console.log(counter(increase)); // 2
// ์์ ๋ณ์๋ฅผ ๊ณต์ ํฉ๋๋ค.
console.log(counter(decrease)); // 1
console.log(counter(decrease)); // 0๋ ๋ฆฝ๋ ์นด์ดํฐ๊ฐ ์๋๋ผ ์ฐ๋ํ์ฌ ์ฆ๊ฐ์ด ๊ฐ๋ฅํ ์นด์ดํฐ๋ฅผ ๋ง๋ค๋ ค๋ฉด ์์ ์ฝ๋์ฒ๋ผ ๋ ์์ปฌ ํ๊ฒฝ์ ๊ณต์ ํ๋ ํด๋ก์ ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
2021-10-04, ์ถ๊ฐ์ ์ผ๋ก ๊ณต๋ถ์ ์ ๋ฆฌ๊ฐ ํ์ํ ๋ด์ฉ๋ค
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ ์์ปฌ ํ๊ฒฝ(Lexical Environment)๋ ์ ์ธ๋ ์์ ์์ ์ค์ฝํ๋ฅผ ๊ฐ๋๋ฐ,
this๋... ๋ค๋ฅธ๊ฐ์? ์๋ ์์ ์ฝ๋๋ฅผ ๋ณด์ฃ !
-
์ ๋ฆฌํด์ผํจ
-
์ฐธ์กฐ Link