-
๐์๋ฐ์คํฌ๋ฆฝํธ 2 | ์ค์ฝํ(scope), let vs var vs const์๋ฐ์คํฌ๋ฆฝํธ 2021. 11. 15. 17:39
์ค์ฝํ(scope)
์ค์ฝํ๋ ์ฝ๊ฒ ๋งํด ๋ณ์์ ์ ํจ๋ฒ์์ด๋ค.
function start(){ for (let i = 0; i < 5; i++){ console.log(i); } console.log(i); } start();
์์ ์ฝ๋๋ฅผ ์คํ ์์ผ๋ณด๋ฉด
for ๋ฌธ ์์ console.log(i) ๋ ์ ์คํ๋ ๋ฐ๋ฉด, for ๋ฌธ ๋ฐ์ console.log(i)๋ i๊ฐ ์ ์๋์ด ์์ง ์๋ค๊ณ ์๋ฌ๊ฐ ๋ฌ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ ์ด์ ๋ i๊ฐ for ๋ฌธ ์์์๋ง ์ ํจํ ๋ณ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ๋ณ์๋ฅผ ์์ ๋ฐ์์ ์ ์ธํ์ฌ ์ค์ฝํ์ ๋ฒ์๋ฅผ for๋ฌธ ๋ฐ์ผ๋ก ํ์ฅ์ํฌ ์ ์๋ค.
function start(){ let i = 0; for(i = 0; i < 5; i++){ console.log(i); } console.log(i); } start();
์ด๋ ๊ฒ ์ด๋ค ๊ฒฝ๊ณ(์ฌ๊ธฐ์๋ for๋ฌธ ์๊ณผ ๋ฐ) a์ ์ธ๋ถ์์ ์ ์ธํ ๋ณ์๋ a์ ์ธ๋ถ๋ฟ๋ง ์๋๋ผ a์ ๋ด๋ถ์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง a์ ๋ด๋ถ์์ ์ ์ธํ ๋ณ์๋ ์ค๋ก์ง a์ ๋ด๋ถ์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
Var vs Let vs Const
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ณ์๋ฅผ ์ ์ธํ ๋ var, let, const ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
์ธ๋ป๋ณด๊ธฐ์ var ์ let ํค์๋๋ ๋น์ทํด๋ณด์ธ๋ค. ํ์ง๋ง ์ด ๋ ๊ฐ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ์ค์ฝํ์ด๋ค.
function start(){ for(var i = 0; i < 5; i++){ console.log(i); } console.log(i); } start();
์๊น ์ฝ๋์ ๋น๊ตํด์ ๋ณธ๋ค๋ฉด i๋ for๋ฌธ ์์์ ์ ์๋์๊ธฐ ๋๋ฌธ์ i๊ฐ ์ ์๋์ด์์ง ์๋ค๋ ์ค๋ฅ๊ฐ ๋ ์ผ ํ๋ค. ํ์ง๋ง var๋ก ์ ์ํ์ ๋๋ ์ค๋ฅ ์์ด i๊ฐ ์ ์ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ ์ด์ ๋ let์ ์ค์ฝํ ๋ฒ์๊ฐ { } block ์ธ ๋ฐ๋ฉด, var๋ ์ค์ฝํ ๋ฒ์๊ฐ ํจ์๋จ์์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, var = i๋ start ํจ์ ์์์๋ ์ ํจํ ํจ์์ด๋ค.
๋๋ฌธ์ ํจ์ ๋ฐ์์ ํธ์ถํ์ ๋๋ ์๋ฌ๊ฐ ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ ํ๋ let ๊ณผ var์ ๋ค๋ฅธ ์ ์ ํ์ธํ ์ ์๋ค.
var color = "red"; let age = 30; console.log(window.color); console.log(window.age);
๋ ๋ณ์๋ฅผ ๋ชจ๋ gloval variable๋ก ์ ์ธํ์๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ ๋ณ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ ์ ์ญ ๊ฐ์ฒด์ธ window์ ํ๋กํผํฐ๊ฐ ๋์์๊น?
window.color๋ red๋ก ์ ์ถ๋ ฅ๋ ๋ฐ๋ฉด, window.age๋ undefined๊ฐ ์ถ๋ ฅ๋์๋ค. var๋ window๊ฐ์ฒด ์์ ๋ณ์๊ฐ ์ ์ธ๋๋ ๋ฐ๋ฉด, let ํค์๋๋ window์ ๋ฟ์ง ์๋๋ค.
๊ทธ๋ผ let๊ณผ var ์ค ์ด๋ค ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊น?
์ฐ๋ฆฌ๋ letํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๋ง์ฝ ์ 3์๊ฐ ๋ง๋ ์ฝ๋(third party)๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ var๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ๋ค๋ฅธ ์ฌ๋์ด ์ ์ธํ ๋ณ์๋ค์ด ๋ด ์ฝ๋์ ์ํด ๋ฎ์ด์์์ง๊ฑฐ๋ ๊ทธ ๋ฐ๋์ ์ํฉ์ ์ด๋ํ ์ ์๋ค(๋ณ์์ ์ค์ฝํ๊ฐ ๋๋ฌด ๋๊ธฐ ๋๋ฌธ์). ์ฝ๋์ ์์ ์ฑ์ ์ํด์๋ผ๋ let์ ์ฌ์ฉํ์.
var let const scope function-scoped block-scoped block-scoped ์ฌํ ๋น yes yes no [์ฐธ๊ณ ์๋ฃ]
https://www.youtube.com/watch?v=XgSjoHgy3Rk
'์๋ฐ์คํฌ๋ฆฝํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐์๋ฐ์คํฌ๋ฆฝํธ 3 | Lexical Environment, Scope Chain (0) 2021.11.15 ๐์๋ฐ์คํฌ๋ฆฝํธ 1 | ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ (0) 2021.11.13 ๐ ๋๊ธฐ์ ๋น๋๊ธฐ | Promises, callbacks, async/await (0) 2020.08.10 ๐์๋ฐ์คํฌ๋ฆฝํธ 5 | this, 5๊ฐ์ง ๋ฐ์ธ๋ฉ ํจํด (0) 2020.07.21