๋ค์ด๊ฐ๋ฉฐ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์ ์ ์ธ ๋ฐฉ๋ฒ์๋ var์ let, const๊ฐ ์๋ค๋ ์ฌ์ค์
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์กฐ๊ธ ๊ณต๋ถํ๊ธฐ ์์ํ๋ฉด ๊ธ๋ฐฉ ์๊ฒ๋๋ ์ฌ์ค์ด๋ค.
๊ทธ๋ฆฌ๊ณ var ํค์๋๋ฅผ ์ง์ํด์ผํ๋ค๋ ๊ฒ์ ๋๋ต์ ์ผ๋ก ์ต๋ํ๊ฒ ๋๋ค.
์กฐ๊ธ ๋ ๊ฒ์์ ํด๋ดค๋ค๋ฉด const ํค์๋๋ ์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅํ๋ ๋๋๋ก const ํค์๋๋ฅผ ์งํฅํ๊ณ ,
์ฌํ ๋น์ด ํ์ํ ๊ฒฝ์ฐ์๋ง let ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๋ ์ฌ์ค๊น์ง ์ ์ ์๋ค.
์ฌ๊ธฐ๊น์ง ์ข๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ์ด์ ๋๋ฌธ์ผ๊น?
๋ด ๋จธ๋ฆฟ์์ ์ ๋ฆฌํ๊ธฐ ์ํด์ ๋ช๊ฐ์ง ๊ฐ๋ ๊ณผ ํจ๊ป ์ด๋ฅผ ์์๋ณด๊ณ ์ ํ๋ค.
๊ทธ๋์ var ํค์๋๋ ๋ญ๊ฐ ๋ฌธ์ ์ผ๊น?
๋ณ์ ์ค๋ณต ์ ์ธ์ด ๊ฐ๋ฅ
๋จผ์ let๊ณผ const ํค์๋๋ก ๋ณ์๋ฅผ ์ค๋ณต ์ ์ธํ ๊ฒฝ์ฐ์๋ ์ด๋ฏธ ์ ์ธ๋์๋ค๋ ์๋ฌ๊ฐ ๋จ์ง๋ง,
var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ค๋ณตํด์ ์ ์ธ์ ํ ์ ์๋ค.
var hello = 'hi';
var js = 'javaScript';
var hello = 1;
var js;
console.log(hello); // 1
console.log(js); // javaScript
let hi = 123;
let hi = 456; // Uncaught SyntaxError: Identifier 'hi' has already been declared
const num = 123;
const num = 'number'; // Uncaught SyntaxError: Identifier 'num' has already been declared
๊ทธ๋ฌ๋ var ํค์๋๋ฅผ ์ฌ์ฉํ ๋ณ์ hello๋ ๋จผ์ hi๋ฅผ ํ ๋น๋ฐ์์์๋ ๋ค์ ์ ์ธ๋ ์ค๋ณต ๋ณ์๋ก ๋ฎ์ด์์์ง ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ์๋์น ์๊ฒ ๊ฐ์ด ๋ฐ๋ ๊ฐ๋ฅ์ฑ์ด ์ปค์ ธ๋ฒ๋ฆฌ๊ณ ์์ธก ๋ถ๊ฐ๋ฅํ ์ฝ๋๊ฐ ๋ ์ ์๋ค.
์ฆ ๋ค์ํ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค๋ ๊ฒ์ด๋ค.
์ ์ญ ๋ณ์์ ๋จ๋ฐ
let, const ํค์๋๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ, var ํค์๋๋ ํจ์ ๋ ๋ฒจ ์ค์ฝํ์ด๋ค.
์ค์ฝํ๋ฅผ ๊ฐ๋ตํ๊ฒ ์๊ธฐํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ค์ฝํ
- ์๋ฐ์คํฌ๋ฆฝํธ์์์ ์ค์ฝํ๋ ์ ํจ๋ฒ์. ์ฆ, ๋ณ์, ํจ์ ๋ฑ ์๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ ๋ฒ์๋ฅผ ๋งํ๋ค.
- ์ด ์๋ณ์๋ค์ ์์ ์ด ์ ์ธ๋ ์์น์ ๋ฐ๋ผ ์ค์ฝํ๊ฐ ๊ฒฐ์ ๋๋ค.
์ง์ญ ์ค์ฝํ
- ํด๋น ์ฝ๋ ๋ธ๋ก ๋ด๋ถ๊ฐ ์ ํจ๋ฒ์์ธ ์ค์ฝํ.
ํจ์ ๋ ๋ฒจ ์ค์ฝํ
- ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ์ ๋ฐ๋๋๋ค. ํจ์ ๋ชธ์ฒด๋ง์ ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํ๋ ์ค์ฝํ.
๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ
- ์ค๊ดํธ๋ก ๊ฒฝ๊ณ๊ฐ ๋ฌถ์ด๋ ๋ชจ๋ ์ฝ๋ ๋ธ๋ก. (if,for,while,switch,try/catch...๋ฑ๋ฑ)
๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ์ธ let๊ณผ const ํค์๋
let a = 'a';
function print(){
const b = 'banana';
let a = 'apple';
if(true){
const a = 'abc';
console.log(a);
}
console.log(a);
}
print();
console.log(a);
console.log(b);
let, const๋ก ์ ์ธ๋ ๋ณ์๋ ์ฝ๋ ๋ธ๋ก ์์์๋ง ์ ํจํ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ์์๋ ์ง์ญ์ ๋ฒ์ด๋๋ฉด ์ง์ญ๋ณ์๊ฐ ์๋์ผ๋ก ์๋ฉธ๋๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์์๋ ์ ๊ทผํ ์ ์๋ค.
ํจ์ ๋ ๋ฒจ ์ค์ฝํ์ธ var ํค์๋
function print(){
var coke = 'zero';
console.log(coke);
}
if(true){
var juice = 'orange';
}
print();
console.log(coke); // Uncaught ReferenceError: coke is not defined
console.log(juice); // orange
var๋ก ์ ์ธ๋ ๋ณ์๋ ํจ์ ๋ด๋ถ์์ ์ฌ์ฉ๋ ๋๋ง ์ ํจํ๊ณ ,
๊ทธ ์ธ์ if๋ฌธ, for๋ฌธ ๋ฑ์ ๊ฒฝ์ฐ๋ ์ด๋์๋ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ ์ ์ญ ๋ณ์๊ฐ ๋๋ค.
์ ์ญ ๋ณ์๋ ๋ชจ๋ ์ค์ฝํ์์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ๋ณ๊ฒฝ๋ ์ ์๊ณ ,
๊ฐ์ฅ ๋ง์ง๋ง์ ๊ฒ์๋๊ธฐ ๋๋ฌธ์ ์๋์ ์ฑ๋ฅ๋ฉด์์ ๋ฌธ์ ๊ฐ ๋๋ค.
๋ณ์์ ํธ์ด์คํ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฝ๋๋ฅผ ์์์ ์๋๋ก ์ฝ์ด๊ฐ๋ฉฐ ํ ์ค์ฉ ์คํํ๋ ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ด๋ค.
๋ณ์๋ฅผ ์ ์ธ๋ฌธ๊ณผ ์ด๊ธฐํ ๋จ๊ณ(ํ ๋น)๋ก ๋๋ ์ ์๋๋ฐ,
ํธ์ด์คํ
์ ๋ฐํ์ ์ด์ ์ ๋ด๋ถ์ ์ผ๋ก ์ ์ธ๋ฌธ์ ๋ชจ๋ ์ต์์๋ก ๋์ด์ฌ๋ ค๋ฒ๋ฆฌ๋ ๊ฒ์ ๋งํ๋ค.
์ด๋ฐ ํธ์ด์คํ
์ด var ํค์๋์์ ๋ฐ์ํ๋ค.
console.log(hello); // undefined
hello = 'hi'; // ํ ๋น
var hello; // ์ ์ธ
console.log(hello); // hi
์ฒซ๋ฒ์งธ ์ถ๋ ฅ์์ ๋ณ์ hello๋ ์์ง ๊ฐ์ ํ ๋น๋ฐ์ง ์์์์๋ undefined๋ฅผ ๋ฐํํ๋ค.
์ด undefined์ var์์๋ ๋ณ์์ ์ ์ธ๊ณผ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ํ๋ฒ์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ๋์ค๋ ๊ฐ์ด๋ค.
๋ฐ๋ฉด์ let, const ํค์๋๋ ๋ณ์์ ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋๋์ด์ ์งํ๋๋ค.
์ ์ธ์ var ํค์๋์ฒ๋ผ ๋ฐํ์ ์ด์ ์ ์คํ๋์ง๋ง ์ด๊ธฐํ๋ ๋ณ์ ์ ์ธ๋ฌธ์์, ํ ๋น์ ํ ๋น๋ฌธ์์ ์คํ๋๋ค.
console.log(kiwi); // Uncaught ReferenceError: kiwi is not defined
let kiwi = 'kiwi'; // ์ ์ธ๊ณผ ํ ๋น
console.log(kiwi); // kiwi
์ฒซ๋ฒ์งธ ์ถ๋ ฅ์์ ๋ณ์๊ฐ ์์ง ์ด๊ธฐํ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐํ ์ ์๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์์์ ์์๋ถํฐ ๋ณ์ kiwi๊ฐ ์ ์ธ๋๊ธฐ ์ ๊น์ง, ์ฐธ์กฐ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์ด ๊ตฌ๊ฐ์ TDZ(Temporal Dead Zone). ์ผ์์ ์ฌ๊ฐ์ง๋๋ผ๊ณ ํ๋ค.
์ด ๊ตฌ๊ฐ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ค์ํ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด let๊ณผ const ํค์๋์์๋ ๋ณ์ ํธ์ด์คํ
์ด ๋ฐ์ํ์ง ์๋ ๊ฑธ๊น?
๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ๋ฟ์ด๋ค.
let a = 'apple'; // ์ ์ญ ๋ณ์
function print(){
console.log(a); // Uncaught ReferenceError: Cannot access 'a' before initialization
let a = 'at'; // ์ง์ญ ๋ณ์
}
์์ ์ฝ๋์์ ํธ์ด์คํ
์ด ์ผ์ด๋์ง ์๋๋ค๋ฉด ์ ์ญ ๋ณ์ a์ ๊ฐ์ธ apple์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํธ์ด์คํ ์ ์ค์ฝํ์ ๋ฐ๋ผ ํจ์ ๋ด๋ถ์์๋ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์,
์ง์ญ ๋ณ์ a๊ฐ ์์ง ์ด๊ธฐํ ๋์ง ์์ ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
var
- ๋ณ์์ ์ค๋ณต ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
- ํจ์ ๋ ๋ฒจ ์ค์ฝํ์ด๊ธฐ ๋๋ฌธ์ ํจ์ ๋ด๋ถ์ ๋ณ์ ์ธ์๋ ๋ชจ๋ ์ ์ญ ๋ณ์๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.
- ๋ณ์ ํธ์ด์คํ ์ด ๋ฐ์ํด์ ์ ์ธ ์ด์ ์ ๋ณ์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
let๊ณผ const
- ๋ณ์์ ์ค๋ณต ์ ์ธ์ด ๋ถ๊ฐํ๋ค.
- ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ผ ์ง์ญ ์ค์ฝํ ์ด์ธ์ ๋ณ์๋ ์ฐธ์กฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- ํธ์ด์คํ ์ด ๋ฐ์ํ์ง๋ง TDZ ๋๋ฌธ์ ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
- const๋ ์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅํ ๋ณ์๋ฅผ ์ํ ํค์๋๋ค.
'๐ Studying > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ํ๋ก๋ฏธ์ค์ ๋ํด ์์๋ณด์ Promise (3) | 2022.04.27 |
---|---|
[JavaScript] Fetch API ์ฌ์ฉํด๋ณด๊ธฐ (JSONplaceholder) (3) | 2022.04.26 |
String (0) | 2022.04.06 |
์๋ณ์ (0) | 2022.03.01 |
๋ณ์ (0) | 2022.03.01 |
Comment