์ฐธ๊ณ
๋ชจ๋์๋ฐ์คํฌ๋ฆฝํธ Deep Dive
https://velog.io/@wksh229/JavaScript-var-%EC%93%B0%EC%A7%80%EB%A7%88-%EC%A0%9C%EB%B0%9C
https://batcave.tistory.com/39
https://valueengine.tistory.com/15
var์ ํน์ง
var๋ variable(๋ณ์)์ ์ค๋ง๋ก, Javascript ES5์์๋ var ํค์๋๋ง์ด ๋ณ์๋ฅผ ์ ์ธํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด์๋ค. ๊ทธ๋ฌ๋ ES6๋ถํฐ๋ let, const ํค์๋๋ฅผ ์ง์ํ๋ฉด์ var์ ์ฌ์ฉ์ ์ง์ํ๊ณ ์๋ค.
var์๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์๋ค.
- function scope(ํจ์ ๋ด๋ถ์ ์๋ค๋ฉด ์ ์ธ ์์น์ ๊ด๊ณ์์ด ์ฌ์ฉ์ด ๋จ)
- var ํค์๋ ์๋ต ํ์ฉ
- ์ค๋ณต ์ ์ธ ํ์ฉ
- ๋ณ์ ํธ์ด์คํ
ํ์ง๋ง var์ ์ด๋ฐ ํน์ง๋ค๋ก ์ธํด ๋ฌธ์ ์ ๋ค์ด ๋ฐ์ํ๋ค.
var์ ๋ฌธ์ ์
1. function-level scope
์ผ๋จ ์๋ฐ์คํฌ๋ฆฝํธ์์์ ์ค์ฝํ์๋ ์ ์ญ์ค์ฝํ, ์ง์ญ์ค์ฝํ๋ก ๋๋ ์ ์๋ค.
- ์ ์ญ ์ค์ฝํ(global scope) : ์ฝ๋ ์ด๋์์๋ ์ฐธ์กฐํ ์ ์์
- ์ง์ญ ์ค์ฝํ(local scope) : ์ ์๋ ๋ธ๋ก ๋ด์์๋ง ์ฐธ์กฐ ๊ฐ๋ฅ
์ฆ ์ ์ญ ๋ณ์๋ ์ ์ญ ์ค์ฝํ๋ฅผ ๊ฐ๋ ๋ณ์๋ก ์ ์ญ์์ ์ฐธ์กฐํ ์ ์์ผ๋,
์ง์ญ๋ณ์๋ ์ง์ญ ์ค์ฝํ๋ฅผ ๊ฐ๋ ๋ณ์๋ก ๊ทธ ์ง์ญ ๋ฐ ์ง์ญ์ ํ๋ถ์์๋ ์ฐธ์กฐํ ์ ์๊ฒ ๋๋ค.
var ํค์๋๋ function-level scope(ํจ์ ๋ ๋ฒจ ์ค์ฝํ), let ํค์๋๋ block-level scope(๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ)๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ, ๋๋ค ์ง์ญ์ค์ฝํ์ ์ํ๋ค.
1) ํจ์ ๋ ๋ฒจ ์ค์ฝํ - var : ํจ์ ๋ธ๋ก ๋ด์์ ์ ์ธํ ๋ณ์๋ง ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํด์ฃผ๋ฉฐ, ํจ์ ์์ ๊ณผ ํ์ ํจ์์์๋ง ์ฐธ์กฐ ๊ฐ๋ฅ. ๊ทธ ์ด์ธ์ ๋ธ๋ก์์ ์ ์ธํ๋ฉด ์ ์ญ๋ณ์๋ก ์ทจ๊ธํจ.
2) ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ - let : ๋ธ๋ก(if๋ฌธ, for๋ฌธ, while๋ฌธ ๋ฑ) ๋ด์ ์ ์ธ๋ ์ง์ญ๋ณ์๋ ๋ธ๋ก ๋ด๋ถ์์๋ง ์ ๊ทผํ๊ฒ ํด์ค
์ฆ, ํจ์ ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๋ฐ๋ฅด๋ var ํค์๋๋ ์๋์ ๊ฐ์ด ํจ์๊ฐ ์๋ ๋ค๋ฅธ ๋ธ๋ก์ด๋ผ๋ฉด ๊ทธ ๋ฐ์์๋ ๋ธ๋ก ๋ด var ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๊ฒ ๋์ด๋ฒ๋ฆฐ๋ค. ์๋์ ๊ฒฝ์ฐ์๋ ํจ์ ๋ด ์ธ ์ ๋ถ var a๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ ์ถ๋ ฅํ ๋ชจ์ต์ด๋ค.
var a = 10;
function abcd() {
var a = 'var';
console.log(a);
}
abcd(); // ์ง์ญ๋ณ์
console.log(a); // ์ ์ญ๋ณ์
function ๋ด์์๋ a๊ฐ ์ ์ธ๋์์ผ๋ ๊ทธ๋๋ง ํจ์ ๋ด์์๋ง var a = 'var'๋ก ํ ๋นํ ์ง์ญ๋ณ์์ธ a์ด๊ธฐ ๋๋ฌธ์,
ํจ์๊ฐ ์ข ๋ฃ๋๊ณ ๋์๋ ์ฌ๋ผ์ง๊ณ ์ ์ญ๋ณ์ a์ ๊ฐ์ธ 10์ด ์ถ๋ ฅ๋ ๋ชจ์ต์ด๋ค.
๋ฌธ์ ๋ function ์ธ์ if๋ฌธ, for๋ฌธ ๋ฑ์ ๋ค๋ฅธ ๋ธ๋ก๋ค์์ ์ ์ธํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ์ญ๋ณ์๋ก ์ฌ์ฉ๋๋ค
for(var i = 0; i < 5; i++){
console.log(i)
}
console.log('for๋ฌธ ๋');
console.log(i);
i++;
console.log(`i์ ๊ฐ์ ${i}`);
์ด์ฒ๋ผ var๋ฅผ ์ฌ์ฉํด ๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ ๋ด ์๋์ ๊ด๊ณ์์ด ์ ์ญ๋ณ์์ ๋จ๋ฐ๋ก ์ด์ด์ง ์ ์๋ค.
2. ์ค๋ณต ์ ์ธ ํ์ฉ
๋ณ์๋ฅผ ์ค๋ณต์ ์ธ์ ํ ๊ฒฝ์ฐ, ๋ฏธ๋ฆฌ ์ ์ธํด๋ ๋ค๋ฅธ ๋ณ์์ ์ด๋ฆ์ ๊น๋นกํ๊ณ ๋ ์ฌ์ฉํ๋ค๋ฉด ๊ทธ ๊ฐ์ด ๊ฒฐ๊ตญ ๋ฌ๋ผ์ง ์ ์๋ค.
var aibao = "panda";
console.log(aibao);
var aibao = "wolf";
console.log(aibao);
์์ ์์๋ 4์ค๋ฐ์ ์๋๋ ์ฝ๋๋ผ ๋น์ฐํ ํ์ ํ ์ ์์ง๋ง, ๋ง์ฝ์ 1000์ค์ด ๋์ด๊ฐ๋ ๊ธด ์ฝ๋์์ ๋ด๊ฐ aibao์๊ฒ 'panda'๋ผ๋ ๊ฐ์ ํ ๋นํ ๊ฒ์ ๊น๋จน๊ณ ๋ 'wolf'๋ผ๋ ๊ฐ์ ํ ๋นํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์๋ ์๋ค.
let์ ๊ฒฝ์ฐ aibao๋ ์ด๋ฏธ ์ ์ธ๋์๋ค๋ฉฐ ์๋ฌ๊ฐ ๋ฐ์ํ์ง๋ง, var๋ก ์ ์ธํ aibao๋ ์๋์ ๊ฐ์ด ๋๋๊ฐ๋๋ค...
3. ๋ณ์ ํธ์ด์คํ
ํธ์ด์คํ (hoisting)
์ธํฐํ๋ฆฌํฐ๊ฐ ๋ณ์์ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ธ ์ ์ ๋ฏธ๋ฆฌ ํ ๋นํ๋ ๊ฒ
=> ์ฆ, ๋ณ์๊ฐ ์ ์ธ๋ ์์ ๋ณด๋ค ๋จผ์ ์คํ๋๋ ํ์
์ฌ์ค var๋ฟ๋ง ์๋๋ผ let, const, function ๋ฑ ๋ชจ๋ ์๋ณ์๋ค์ด ํธ์ด์คํ ์ด ๋์ง๋ง, var๋ง ๋ฌธ์ ์ธ ์ด์ ๊ฐ ์๋ค.
console.log(aibao); // undefined
var aibao = "panda";
console.log(aibao); // panda
1ํ : ์ฒ์์ console.log(aibao);๊ฐ ์คํ๋๊ธฐ ์ด์ ,
var aibao="panda";๊ฐ ํธ์ด์คํ ๋์ด aibao๊ฐ ๋ณ์ ๊ฐ์ฒด์ ๋ฑ๋ก๋๊ณ ๊ฐ์ undefined๋ก ์ด๊ธฐํ๋๋ค.
2ํ : ์ดํ var aibao = "panda"๋ก ๊ฐ์ด ํ ๋น๋๊ณ ,
3ํ : ๋ง์ง๋ง์ console.log(aibao);์์ panda๋ก ์ถ๋ ฅ๋๋ค.
๋ฌผ๋ก let๋ ํธ์ด์คํ ์ด ๋์ง๋ง, var์๋ ๋ฌ๋ฆฌ ์ ์ด๋ฏธ์ง์ ๊ฐ์ ์ฐธ์กฐ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
javascript๋ ๋ณ์ ์ ์ธ ์ด๊ธฐํ ์์ ์ด ๋ถ๋ฆฌ๋์ด ์งํ๋๋๋ฐ, var์ ๋ฌ๋ฆฌ let์ ์ ์ธ์ด ์๋ ์ํ์์ ๊ฐ์ ์ ๊ทผํ ๋์ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด TDZ(Temporal Dead Zone, ์ผ์์ ์ฌ๊ฐ์ง๋)๋ก ์๋ฌ๋ฅผ ๋ฐ์ํ๋ค.
์ด๋ฌํ ์ด์ ๋ค์ด ์์ด var๋ ์ด์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ, ๊ตณ์ด ์ธ ํ์์กฐ์ฐจ ์์ด์ก๋ค.
'javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
javascript/์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ (0) | 2025.03.20 |
---|---|
javascript/chart.js๋ก ๊ทธ๋ํ ๋ง๋ค๊ธฐ (0) | 2025.03.19 |
250313 to-do ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ (2) (0) | 2025.03.14 |
250313 to-do ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ (1) (1) | 2025.03.13 |
250307 ํ๋ก๊ทธ๋๋จธ์ค (0) | 2025.03.07 |