๐ scope
๋ณ์ ์ ๊ทผ ๊ท์น์ ๋ฐ๋ฅธ ์ ํจ ๋ฒ์
๋ณ์๋ ์ด๋คํ ํ๊ฒฝ ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๊ฐ๊ฐ์ ๋ณ์ ์ ๊ทผ ๊ท์น์ ๊ฐ๊ณ ์์ต๋๋ค.
๋ณ์์ ๊ทธ๊ฐ์ด ์ด๋์๋ถํฐ ์ด๋๊น์ง ์ ํจํ์ง๋ฅผ ํ๋จํ๋ ๋ฒ์๋ฅผ scope๋ฒ์ ๋ผ๊ณ ํฉ๋๋ค.
javascrip๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํจ์๊ฐ ์ ์ธ๋๋ ๋์์ ์์ ๋ง์ scope๋ฅผ ๊ฐ์ง๋๋ค.
๐ ์ง์ญ๋ณ์์ ์ ์ญ๋ณ์
ํจ์ greetSomone์์๋ ์ง์ญ ๋ณ์ (Local Scope)๋ผ๊ณ ํ๊ณ , ๊ทธ๋ฐ์ ์ ์ฒด๋ฅผ ์ ์ญ๋ณ์(Global Scope)๋ผ๊ณ ํ๋ค.
let name = 'Hi';// ์ ์ญ๋ณ์
function name(){
let name = 'Hello'; // ์ด๊ธฐํ ์ (์ง์ญ๋ณ์)
consol.log(name); // Hello
}
consol.log(name); // Hi
name()
consol.log(name);//Hi
-> ํจ์๋ฅผ ํธ์ถ ํ ๋๋ง ํจ์ ์์ ์๋ ์ง์ญ ๋ณ์์ธ name(Hello)์ด ์ถ๋ ฅ๋๊ณ , ํจ์ ์ถ๋ ฅ์ด ์๋ name์ ํธ์ถ ํ ๋๋ ์ ์ญ๋ณ์์ ์ ์ธ๋์ด ์๋ name(Hi)๊ฐ ์ถ๋ ฅ๋๋ค!
let name = 'Hi';// ์ ์ญ๋ณ์
function name(){
name = 'Hello'; // ์ด๊ธฐํ ํ์ง ์์ (์ฌ์ ์ธ)
consol.log(name); // Hello
}
consol.log(name); // Hi
name()
consol.log(name);//Hello
-> ํจ์ ์์ let ์ด๋ผ๋ ์ ์ธ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๊ธฐํ ํ์ฌ ์ ์ธ ํ์ง ์๊ณ ๋ฐ๊นฅ name์ ์ฌ์ ์ธ์ ํ์์ผ๋ฏ๋ก name์ Hello๋ก ๋ณ๊ฒฝ ๋์๋ค
- ์์ชฝ ์ค์ฝํ์์๋ ๋ฐ๊นฅ ์ค์ฝํ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ ๋ฐ๊นฅ์ชฝ์์๋ ์์ชฝ ์ฐธ์กฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- ์ง์ญ๋ณ์๋ ํจ์๋ด์์ ์ ์ญ๋ณ์ ๋ณด๋ค ๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋๋ค.
- ์ ์ญ๋ณ์๋ ์ต์๋จ์ scope๋ก ์ด๋์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ let
for(let i = 0; i < 5; i++){ console.log (i); } console.log(i); // {} ๋ฅผ ๋ฒ์ด ๋ซ์ผ๋ฏ๋ก i ์ฌ์ฉ๋ถ๊ฐ
Block :{} ์ค๊ด๋กํธ ์์ํ๊ณ ๋๋๋ ๋จ์
๐ var
for(var i = 0; i < 5; i++){ console.log (i); } console.log(i); // 5
var์ ๋ฒ์๊ฐ ๋ฒ์ด๋๋ ๊ฐ์ ํจ์ ๋ด์์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๐const
- let๊ณผ ๊ฐ์ด block๋ฒ์๋ฅผ ๊ฐ์ง๋ค.
- ํ๋ฒ ์ด๊ธฐํ ํ๋ฉด ๊ฐ์ด ๋ณํ์ง ์๋๋ค. ์ฌ์ ์๋ถ๊ฐ!!
๐ ๋ณ์ ์ ์ธ์ ์ฃผ์์ !
function name(){
name = 'Hello'; // ์ ์ญ๋ณ์ ์ ์ธ์ผ๋ก๋จ
consol.log(name); // Hello
}
consol.log(name); // Hello
let, var, const๋ก ์ ์ธํ์ง ์์ผ๋ฉด ์ ์ฐ๋ณ์๊ฐ ๋์ด Block์ ๋ฒ์ด๋์ ์ ์ญ์์ ์ฌ์ฉ๊ฐ๋ฅํด์ง๋ค.
๊ทผ๋ฐ, ์ค๋ฅ๋ ์๋ ์ ๊ฐ๋ ์ด๋ฐ ์ค์๋ฅผ ํ ์๊ฐ ์๋ค. ๊ทธ๋์ ์ค์๋ฅผ ๋ฐฉ์ง ํ๊ธฐ ์ํด
์๋ฐ์คํฌ๋ฆฝํธ ์๋จ์ โuse strictโ ์ฐ๋ฉด ๋ฌธ๋ฒ์ ์ผ๋ก ์ค์ํ ์ ์๋ ๋ถ๋ถ๋ค์ ์๋ฌ๋ก ํ๋จํด์ค๋ค.