
์ค์ฝํ๋?
์ค์ฝํ(Scope)๋, ์ ํจ๋ฒ์๋ ๋ป์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉํ๋ ์ค์ํ ๊ฐ๋ ์ ๋๋ค.
์ค์ฝํ์ ๊ฐ๋ ์ ์ ์์์ผ ์๋ฐ์คํฌ๋ฆฝํธ์ let, const์ var ์ ์ธ์์ ์ฐจ์ด ๋ฑ์ ์ดํดํ๋๋ฐ ์ด๋ ค์์ ๋ ์ ์์ต๋๋ค.
[์ถ๊ฐ ๊ธ ์์ฑ ์์ ์ ๋๋ค.]
์ค์ฝํ์ ์ข ๋ฅ
์ฝ๋๋ ํฌ๊ฒ ๋ ๊ฐ์ง์ ์ค์ฝํ๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
์ฝ๋์ ๊ฐ์ฅ ๋ฐ๊นฅ ์์ญ, ์ ์ญ ์ค์ฝํ
ํจ์ ๋ชธ์ฒด ๋ด๋ถ ์์ญ, ์ง์ญ ์ค์ฝํ
๊ฐ๋จํ ์์ ๋ฅผ ์ดํด๋ณด๋ฉด,

์์ ์ฝ๋ ๋ด๋ถ์ ์์ ๊ฐ์ ์ค์ฝํ๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
[์ถ๊ฐ ๊ธ ์์ฑ ์์ ์ ๋๋ค.]
๋ ์์ปฌ ์ค์ฝํ
์๋ ์ฝ๋๋ฅผ ์์ธก ํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ ์ ์คํฌ๋กค์ ๋ฉ์ถ๊ณ ์๊ฐํด๋ณด๊ธธ ๊ถํด๋๋ฆฝ๋๋ค.
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // ??
bar(); // ??
์คํ๊ฒฐ๊ณผ๋ฅผ ์์ธกํด๋ณด๋ฉด, ๋ ๊ฐ์ง์ ๊ฐ์ค์ ์ธ์ธ ์ ์์ต๋๋ค.
- ํจ์๋ฅผ ํธ์ถํ ๊ณณ์ ๊ธฐ์ค์ผ๋ก ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ์ฌ ๋ณ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ํจ์๋ฅผ ์ ์ธํ ๊ณณ์ ๊ธฐ์ค์ผ๋ก ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ์ฌ ๋ณ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
1๋ฒ๊ณผ ๊ฐ์ ์ค์ฝํ ๊ฒฐ์ ๊ธฐ์ค์ ๋์ ์ค์ฝํ๋ผ๊ณ ํ๋ฉฐ, ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํจ์ ์์ด ํจ์๊ฐ ์ด๋์์ ํธ์ถ๋๋์ง์ ๋ฐ๋ผ ๊ฒฐ์ ํ์ฌ ์คํ ์ค์ ๋์ ์ผ๋ก ๋ณํ๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
2๋ฒ๊ณผ ๊ฐ์ ์ค์ฝํ ๊ฒฐ์ ๊ธฐ์ค์ ๋ ์์ปฌ(์ ์ ) ์ค์ฝํ๋ผ๊ณ ํ๋ฉฐ, ํจ์์ ํธ์ถ์ด ์๋ ํจ์์ ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ ์์ปฌ ์ค์ฝํ๋ฅผ ๋ฐ๋ฅด๋ฉฐ, ๋ฐ๋ผ์ ์์ ์์ ๋ ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 1
bar(); // 1
์ด๋ ํจ์์ ์ ์ ๋ฐฉ์์ด ๋ฐ๋์ด๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
var x = 1;
function foo() {
var x = 10;
bar();
}
const bar = function () {
console.log(x);
}
foo(); // 1
bar(); // 1
var x = 1;
function foo() {
var x = 10;
bar();
}
const bar = () => {
console.log(x);
}
foo(); // 1
bar(); // 1
๋ง๋ฌด๋ฆฌ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ ์์ปฌ ์ค์ฝํ๋ฅผ ์๊ณ ์๋ค๊ณ ์๊ฐํ์ง๋ง,
ํจ์์ ํ๊ฐ ๋จ๊ณ์์ ์ค์ฝํ๊ฐ ๊ฒฐ์ ๋์ด ํจ์ ํํ์์ด๋ ํ์ดํ ํจ์๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์์๊น? ๋ผ๋ ์๊ฐ์ ํด๋ดค๋๋ฐ,
์ด๋ ํจ์์ ์ ์๋จ๊ณ์์ ๊ฒฐ์ ๋์ด์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ๊ฐ, ์คํ ๋จ๊ณ์ ์๊ด์์ด ์งํ๋๋ ๊ฒ์ ์ ์ ์์๋ค.
์ญ์ ๊ณต๋ถ๋ ๋์ด ์๊ตฌ๋..
์ฐธ์กฐ

“๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ”, ์ด์ ๋ชจ