Scope-1
๐ก JS๋ฅผ ๊ณต๋ถํ๋ค๋ณด๋ฉด scope๋ผ๋ ๊ฒ์ ๋ง์ด ์ ํด๋ณด์ จ์ํ ๋ฐ์, ์ ๋ scope์ ๋ํด์ ์๊ณ ์๋ค๊ณ ์๊ฐํ๋๋ฐ ์ค๋ช ์ ํด๋ฌ๋ผํ๋ฉด ๊น๋ํ๊ฒ ์ ๋ฆฌ๊ฐ ์๋๋๋ผ๊ณ ์ใ ใ ๊ทธ๋์! ์ค๋์ ํ์คํ๊ฒ ์ ๋ฆฌํด๋ณด๋๋ก ํ ๊ฒ์! scope๋ Global Scope(์ ์ญ ์ค์ฝํ), Local Scope(์ง์ญ ์ค์ฝํ) 2๊ฐ์ ํ์ ์ผ๋ก ๋๋ ๋ณผ ์ ์๋๋ฐ์ ๊ฐ๊ฐ์ ์ ์์ ์ฐจ์ด์ ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
Scope(์ค์ฝํ)๋?
์ ๋ง ๊ทธ๋ฅ ๋จ์ํ๊ฒ ๋ณ์์ ์ ๊ทผํ ์ ์๋ ๋ฒ์๋ฅผ ์๋ฏธํฉ๋๋ค.
JS์์๋ ํจ์๋ฅผ ์ ์ธํ๊ฒ๋๋ฉด ์๋์ ์ผ๋ก ์๋ก์ด Scope๋ฅผ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ณณ์์๋ ์ง ์ ๊ทผํ ์ ์๋ ๋ณ์, ํด๋น ์ง์ญ์์๋ง ์ ๊ทผํ ์ ์๋ ๋ณ์๊ฐ ์๋๋ฐ์ ์ด๊ฒ์ด ๊ฐ๊ฐ Global Scope, Local Scope ์ ๋๋ค.
Global Scope(์ ์ญ ์ค์ฝํ), Local Scope(์ง์ญ ์ค์ฝํ)
์ด๋ ์์น์์๋ ์ง ์ ๊ทผํ ์ ์๋ ๋ณ์๋ ์ ์ญ ์ค์ฝํ์ ์ ํจ ๋ฒ์์ ์์ต๋๋ค.
๋ค์ ์ฝ๋์์ ํจ์ ์ธ๋ถ์ ์ ์ธ๋์ด ์๋ duck ๋ณ์๋ ์ ์ญ ์ค์ฝํ ์ ๋๋ค.
var duck = '๊ธ๋ก๋ฒ ๋ฏธ๋๋'; // ์ ์ญ ์ค์ฝํ
function duck_family() { // ์ง์ญ(ํจ์) ์ค์ฝํ
var duck = '๋ฏธ๋๋';
duck = '์ง์ญ ๋ฏธ๋๋';
}
duck_family(); // ์ง์ญ ๋ฏธ๋๋์ผ๋ก ๋ณ๊ฒฝ
console.log("Global Duck: ",duck); // ๋ฏธ๋๋
ํจ์ ๋ด๋ถ์์ duck์ ๊ฐ์ โ์ง์ญ ๋ฏธ๋๋โ์ด๋ผ๊ณ ๋ณ๊ฒฝํ์ฃ ? ๊ทธ๋ฐ๋ฐ ์ค์ ๋ก ํจ์ ๋ฐ๊นฅ์์ ์ถ๋ ฅ์ ํด๋ณด๋ฉด ์ฌ์ ํ โ๋ฏธ๋๋โ์ผ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ํจ์์ ์ค์ฝํ(์ ํจ๋ฒ์) ๋๋ฌธ์ธ๊ฑฐ์์!
์ฌ์ค ์ ์ญ ๋ณ์๋ฅผ ๋ง๋๋ ๊ฒ์ ์ต๋ํ ์ง์ํด์ผํ๋ค๊ณ ํฉ๋๋ค. (์ ๋ ์ด๊ฒ ๋๋ฌธ์ ์ผ์ฃผ์ผ ๋ด๋ด ์ฝ์งํด๋ณธ ๊ฒฝํ์ด ์๋ต๋๋ค..๐น)
ํจ์ ์ธ๋ถ์ ์ ์ญ ๋ณ์๋ฅผ ์ ์ธํ๋ค๋ ๊ฒ์ window ๊ฐ์ฒด ๋ด๋ถ์ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค.
โ์ ๊น! ๊ทธ๋ผ window ๊ฐ์ฒด๊ฐ ๋ญ๋๊ตฌ์?
๋ฐ๋ก ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง, ๋ชจ๋ ๋ณ์๋ค์ ๋ด๊ณ ์๋ ๊ฐ์ฒด์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉํ๋parseInt()
, isNaN()
๊ณผ ๊ฐ์ ๋ฉ์๋๋ location
, history
, document
์ ๊ฐ์ ๊ฐ์ฒด๋ค ์์์ฃ ? ์ด๋ค์ ๋ชจ๋ window
์ ์์๋ค์ด์์.
์ด์ฒ๋ผ window
๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ **๋ชจ๋ ์์๋ค์ ์กฐ์**์ด๊ณ ์๋ต์ด ๊ฐ๋ฅํ ์ ์ญ๊ฐ์ฒด์
๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ window.parseInt()
๋ผ๋ ํ์์ ์ฐ์ง ์๊ณ , parseInt()
๋ผ๊ณ ์ฐ๋ ๊ฒ์ด์ฃ !
๊ทธ๋์ ์ ์ญ ๋ณ์๋ฅผ ์ ์ธํ๊ฒ ๋๋ฉด, window ๊ฐ์ฒด ์์ ๋ฑ๋ก์ด ๋๋ค๋ ๊ฒ์
๋๋ค.
๋ค์์ฒ๋ผ์!!
var family = 'Duck Family';
window.family; // Duck Family
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ํจ์ ๋ด์ ์๋ค๊ณ ํด์ ์ ์ญ๋ณ์์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ด ์๋๋๋ค.
์๊น์๋ ๋ฌ๋ฆฌ ํจ์ ๋ด์ var๋ฅผ ์ ์ธํ์ง ์๊ฒ ์ต๋๋ค.
var duck = '๋ฏธ๋๋';
function duck_family() {
duck = '๋ฏธ๋๋ ๋์';
}
duck_family();
console.log(duck); // ๋ฏธ๋๋ ๋์
์ง ! ์ ์ญ ๋ณ์๊ฐ ๋ฐ๊ผ์ฃ ?
๋ณ์์ ๋ฒ์๊ฐ ์ง์ญ ์ค์ฝํ๋ถํฐ ์์ํด์ ์ ์ญ ์ค์ฝํ๋ก ๋ฒ์๋ฅผ ์ ์ฐจ ๋ํ๊ฐ๋ฉฐ ์ฐพ์๋ณด๊ธฐ ๋๋ฌธ์
๋๋ค. duck_family() ๋ฒ์ ์์ ๋ณ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์ญ ์ค์ฝํ ๋ด์ ์๋ duck ๋ณ์๋ฅผ ์ฐพ์๊ฑฐ์ฃ .
์ง๊ธ๊น์ง Global Scope(์ ์ญ ์ค์ฝํ), Local Scope(์ง์ญ ์ค์ฝฎ)์ ๋ํด์ ์์๋ณด์์ต๋๋ค.
ํ์ง๋ง! ์ฌ๊ธฐ๊น์ง๋ง ์์๋ณด๊ธฐ๋ ์์ฌ์ฐ๋ ๋ ๊น์ด ์๋ ์ค์ฝํ ์ง์์ ์ํด ๋ค์์๋ const, let๊ณผ ๊ด๋ จํด์ ํจ์ ์ค์ฝํ์ ๋ธ๋ก ์ ํจ๋ฒ์ ์ค์ฝํ์ ๋ํด์๋ ์ดํด๋ณผ๊ฒ์!
์ฐธ๊ณ
https://www.zerocho.com/category/JavaScript/post/5740531574288ebc5f2ba97e