์ด์ ๊ธ์ ์๊ธฐ๋ก! ๐ Scope(1)
ย
โ ์ค์ฝํ๊ฐ ์ค์ผ ๋๋ค๋ ๋ง์ ๋ฌด์จ ๋ง์ผ๊น ?
global ๋ณ์๋ฅผ ์ฐ๋ฉด ์ฌ๊ธฐ ์ ๊ธฐ์ ์ ๊ทผํ๊ธฐ ์ฌ์์ ์ข๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง,
๋๋ฌด ๋จ์ฉํ๋ฉด ํ๋ก๊ทธ๋จ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค
global ๋ณ์๋ฅผ ์ ์ธํ๋ฉด, ํด๋นํ๋ก๊ทธ๋จ์ ์ด๋์์๋ ์ฌ์ฉํ ์ ์๋ย global namespace๋ฅผ ๊ฐ๊ฒ ๋๋๋ฐ
namespace๋ผ๋ ๊ฒ์ ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์๋ ๋ฒ์๋ผ๋ ๋ป
scope๋ผ๊ณ ๋ ํ๊ณ ํนํ ๋ณ์์ด๋ฆ์ ์๊ธฐํ ๋๋ namespace๋ผ๊ณ ๋ ํ๋ค
global ๋ณ์๋ ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋ ๋๊น์ง ๊ณ์ ์ด์์๋ค.
์ด ๋ง์ local ๋ณ์๋ย {}
(block)์ด ๋๋๋ฉด ๋ ์ด์ ์ฌ์ฉํ ์ ์๋ค๋ ๋ง์ธ ๊ฒ
global ๋ณ์๊ฐ ๊ณ์ ์ด์์์ด์ ๋ณ์๊ฐ์ด ๊ณ์ ๋ณํ๋ค๋ฉด ํด๋น ๋ณ์๋ฅผ ํธ๋ํนํ๊ธฐ๋ ์ด๋ ต๊ณ
์ด ๋ณ์๊ฐ ์ด๋์์ ์ ํ์ํ์ง ์๊ธฐ ์ํด์๋ย let
,ย const
์ ์ ์ธ๋ถ๊น์ง ์ฐพ์์
ํ์ธํด์ผ ํ๋ค
์๋๋ scope๊ฐ ์ค์ผ๋ ๋ํ์ ์ธ ์
const satellite = 'The Moon';
const galaxy = 'The Milky Way';
let stars = 'North Star';
const callMyNightSky = () => {
stars = 'Sirius';
return 'Night Sky: ' + satellite + ', ' + stars + ', ' + galaxy;
};
console.log(callMyNightSky());
console.log(stars);
callMyNightSky
ย ํจ์์์ ์๋ก์ด ๋ณ์๋ฅผย let
ย ํค์๋๋ฅผ ์ ์ธํ์ง ์์๋คcallMyNightSky
ย ์ ํธ์ถํ๋ฉด stars ๋ณ์์ย "Sirius"
ย ์ด ํ ๋น๋๋คstars
ย ์ ์ํฅ์ด ๊ฐ๋คstars
ย ์ ์ฌ์ฉํ๊ณ ์ถ์๋ฐ ๊ฐ์ด ์์ ๋ย "Sirius"
ย ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ค์กฐ์ฌ โ
์ด๋ ๋ฏ global ๋ณ์๋ฅผ ๋จ์ฉํ๋ค๋ฉด ์ด๋์ ์ด๋ป๊ฒ ๊ฐ์ด ์์ ๋๋์ง ์ถ์ ํ๊ธฐ ์ด๋ ค์์ง๊ฒ ๋๋ค
ย
๐ ์ค์ผ์ ๋ํด์๋ ์์๋ดค์ผ๋,
์ด์ ์ค์ฝํ์ ๋ํด ๋ฌธ์ ๋ฅผ ํตํด ์์ธํ ์์๋ณด์
์๋๋ ์ค์ฝํ ๋ฌธ์ ์ด๋ค ํจ๊ป ํ์ด๋ณด์ ๐ก
์ค์ฝํ๋? ->
let x = 100; // ๋ธ๋ก{} ๋ฐ์ ์ ์ธํ๋ฉด ์ ์ญ์์ ์ ๊ทผํ ์ ์๋ ๋ณ์๊ฐ ๋๋ค = ์ ์ญ๋ณ์
function ํจ์() {
let y = 20; // ๋ธ๋ก{} ์์ ์ ์ธ์ ๋ฐ์์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ = ์ง์ญ๋ณ์
console.log(x); // x๊ฐ ์์ผ๋ ์๋ก ์ฌ๋ผ๊ฐ์ ์ฐพ๋๋ค = ์ค์ฝํ ์ฒด์ด๋
}
ํจ์(); // 100 -> ๋ณ์ x๋ ์ ์ญ๋ณ์์ด๋ค
// ํจ์1 ์ ๊ฐ์ ?
let a = 10;
let b = 10;
function ํจ์1() {
let a = 20;
let b = 20;
function ํจ์2() {
let a = 30;
console.log(a, b, c);
}
ํจ์2();
}
ํจ์1();
์๋๋ ํ์ด๋ฅผ ํ์ธ ํ ์์๋ค
์ค์ฝํ๋?
๋ณ์์ ์ ๊ทผํ ์ ์๋ ์ ํจ๋ฒ์, ๋ณ์์ ์ ๊ทผ์ฑ๊ณผ ์์กด ๊ธฐ๊ฐ์ ์ ์ดํ๋ โ์์กด ๋ฒ์โ๋ฅผ ์๋ฏธ
์ค์ฝํ ์ฒด์ด๋์ด๋ ?
์ค์ฝํ๊ฐ ์ด๋ป๊ฒ ์ฐ๊ฒฐ(chain)๋๊ณ ์๋์ง ๋ณด์ฌ์ฃผ๋ ๊ฒ,
ํด๋น ์์ญ์ ์ฐพ๋ ๋ณ์๊ฐ ์์ผ๋ฉด ๊ณ์ํด์ ์์ ์ค์ฝํ๋ฅผ ๋ฐ๋ผ ์ฌ๋ผ๊ฐ๋ค
window ๊น์ง ๋ฐ๋ผ ์ฌ๋ผ๊ฐ๋ ์์ผ๋ฉด error
let x = 100; // ๋ธ๋ก{} ๋ฐ์ ์ ์ธํ๋ฉด ์ ์ญ์์ ์ ๊ทผํ ์ ์๋ ๋ณ์๊ฐ ๋๋ค = ์ ์ญ๋ณ์
function ํจ์() {
let y = 20; // ๋ธ๋ก{} ์์ ์ ์ธ์ ๋ฐ์์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ = ์ง์ญ๋ณ์
console.log(x); // x๊ฐ ์์ผ๋ ์๋ก ์ฌ๋ผ๊ฐ์ ์ฐพ๋๋ค = ์ค์ฝํ ์ฒด์ด๋
}
ํจ์(); // 100 -> ๋ณ์ x๋ ์ ์ญ๋ณ์์ด๋ค
// ํจ์1 ์ ๊ฐ์ ?
let a = 10; // a=10,b=10,ํจ์1 ์ ๊ฐ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ด ์๋ค
let b = 10;
function ํจ์1() {
// ํจ์1์ a=20, b=20,ํจ์2์ ์ฐ๊ฒฐ๋์ด์๋ค
let a = 20;
let b = 20;
function ํจ์2() {
//ํจ์2๋ a=30 ์ ์ฐ๊ฒฐ๋์ด์๋ค
// ์ฌ๊ธฐ์ ๋ง์ฝ ๋ณ์ c๋ฅผ ์ฐพ์ผ๋ฉด ์ค์ฝํ ์ฒด์ด๋(์ฌ๋ผ๊ฐ๋ฉฐ c๋ฅผ ์ฐพ๋๋ค)ํ๋ค
let a = 30;
console.log(a, b, c);
}
ํจ์2();
}
ํจ์1(); // 30 20