๐ ์ค์ฝํ(scope)
์๋ณ์์ ๋ํ ์ ํจ๋ฒ์.
ex) ์ด๋ค ๊ฒฝ๊ณ A์ ์ธ๋ถ์์ ์ ์ธํ ๋ณ์๋ A์ ์ธ๋ถ๋ฟ ์๋๋ผ A์ ๋ด๋ถ์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง, A์ ๋ด๋ถ์์ ์ ์ธํ ๋ณ์๋ ์ค์ง A์ ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋ค.
scope์ ๊ฐ๋ ์ ๋๋ถ๋ถ์ ์ธ์ด์ ์กด์ฌํ๋ค. ๋ค๋ง ES5๊น์ง์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ํน์ดํ๊ฒ๋ ์ ์ญ๊ณต๊ฐ์ ์ ์ธํ๋ฉด ์ค์ง ํจ์์ ์ํด์๋ง scope๊ฐ ์์ฑ๋๋ค.
๐ ์ค์ฝํ ์ฒด์ธ(scope chain)
scope๋ฅผ ์์์๋ถํฐ ๋ฐ๊นฅ์ผ๋ก ์ฐจ๋ก๋ก ๊ฒ์ํด๋๊ฐ๋ ๊ฒ
์ฌ๋ฌ scope์์ ๋์ผํ ์๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ์๋ ๋ฌด์กฐ๊ฑด scope chain ์์์ ๊ฐ์ฅ ๋จผ์ ๋ฐ๊ฒฌ๋ ์๋ณ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ๋๋ค.
์ค์ฝํ ์ฒด์ธ ์์
var a = 1; var outer = function () { var inner = function () { console.log(a); // undefined var a = 3; } inner(); console.log(a); // 1 }; outer(); console.log(a); // 1
๋ํ ์ค์ฝํ ์ฒด์ธ ์์ ์๋ ๋ณ์๋ผ๊ณ ํด์ ๋ฌด์กฐ๊ฑด ์ ๊ทผ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋ค. ์ ์ฝ๋์์ ์๋ณ์ a๋ ์ ์ญ ๊ณต๊ฐ์์๋ ์ ์ธํ๊ณ inner ํจ์ ๋ด๋ถ์์๋ ์ ์ธํ๋ค.
์ฆ inner ํจ์ ๋ด๋ถ์์ a ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ๋๋ฌธ์ ์ ์ญ ๊ณต๊ฐ์์ ์ ์ธํ ๋์ผํ ์ด๋ฆ์ a ๋ณ์์๋ ์ ๊ทผํ ์ ์๋ ์
์ด๋ค. ์ด๋ฅผ ๋ณ์ ์๋ํ๋ผ๊ณ ํ๋ค.
์ค์ฝํ ์ฒด์ธ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ console.dir์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๋๋ฒ๊ฑฐ(debugger)๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ๋๋ฒ๊ฑฐ๋ฅผ ์ด์ฉํ๋ฉด ์ข ๋ ์ ๋๋ก ๋ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
// console.dir์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
var a = 1;
var outer = function () {
var b = 2;
var inner = function () {
console.log(b);
console.dir(inner);
}
inner();
};
outer();
// debugger์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
var a = 1;
var outer = function () {
var b = 2;
var inner = function () {
console.log(b);
debugger();
}
inner();
};
outer();
'JavaScript > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํจ์ ์ ์ธ๋ฌธ๊ณผ ํจ์ ํํ์ (0) | 2021.11.16 |
---|---|
[JavaScript] undefined, null, undeclared (0) | 2021.11.05 |
[JavaScript] ์ ์ญ ๋ณ์, ์ง์ญ ๋ณ์ (0) | 2021.10.29 |
[JavaScript] call, apply, bind (0) | 2021.10.23 |
๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC) (0) | 2021.10.22 |
๋๊ธ