์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- position
- ์ฝ๋ฉํ ์คํธ
- CSS
- float
- REACT
- ์๋ฐ์คํฌ๋ฆฝํธ
- history api
- useRef
- ์๊ณ ๋ฆฌ์ฆ
- useEffect
- Props
- ๋ธ๋ก๊ทธ
- fetch API
- ํ๋ก ํธ์๋
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- Flex
- Gatsby
- ๋ฐ๋ธ์ฝ์ค
- Today
- Total
Daehyunii's Dev-blog
var/let/const ํค์๋ ๋ณธ๋ฌธ
var/let/const ํค์๋
Daehyunii 2022. 12. 2. 12:35๋ณ์ ์ ์ธ์ ์คํ ์์ ๊ณผ ๋ณ์ ํธ์ด์คํ
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ณ์ ์ ์ธ์ ๋ค์๊ณผ ๊ฐ์ 2๋จ๊ณ์ ๊ฑฐ์ณ ์ํํฉ๋๋ค.
- ์ ์ธ ๋จ๊ณ : ๋ณ์ ์ด๋ฆ์ ๋ฑ๋ก(์คํ ์ปจํ ์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ)ํด์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ณ์์ ์กด์ฌ๋ฅผ ์๋ฆฝ๋๋ค.
- ์ด๊ธฐํ ๋จ๊ณ : ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ์๋ฌต์ ์ผ๋ก undefined๋ฅผ ํ ๋นํด ์ด๊ธฐํ ํฉ๋๋ค. (const ์ ์ธ)
console.log(score); // undefined
var score = 'Hello World'
console.log(score); // 'Hello World'
var hoisting = '์ ์ธ๋ฌธ์ด ์ค์ฝํ์ ์ ๋๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ ๊ณ ์ ํ ํน์ง์ธ ํธ์ด์คํ
์ด๋ผ๊ณ ํฉ๋๋ค'
var ํค์๋๋ก ์ ์ธํ ๋ณ์์ ํน์ง
1. ๋ณ์ ์ค๋ณต ์ ์ธ ํ์ฉ
๋์ผํ ์ค์ฝํ ๋ด์์ var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ค๋ณต ์ ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ๋์์ ๋ฏธ์ธํ ์ฐจ์ด๊ฐ ์กด์ฌํฉ๋๋ค. ์ด๊ธฐํ๋ฌธ ์ ๋ฌด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํฉ๋๋ค. ์ด๊ธฐํ๋ฌธ์ด ์๋ ๋ณ์ ์ ์ธ๋ฌธ์ ๋ง์น var ํค์๋๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋์ํ์ฌ ์ฌํ ๋น์ด ์ด๋ค์ง๊ณ , ์ด๊ธฐํ๋ฌธ์ด ์๋ ๋ณ์ ์ ์ธ๋ฌธ์ ๊ทธ๋ฅ ๋ฌด์๋ฉ๋๋ค.
var x = 1;
var y = 1;
var x = 100; // var ํค์๋๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋์(์ฌํ ๋น ์ฒ๋ผ ๋์)
var y // ๋ฌด์
console.log(x); // 100
console.log(y); // 1
2. ํจ์ ๋ ๋ฒจ ์ค์ฝํ
var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ค๋ก์ง ํจ์์ ์ฝ๋ ๋ธ๋ก๋ง์ ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ํจ์ ์ธ๋ถ์์ var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ฝ๋ ๋ธ๋ก ๋ด์์ ์ ์ธํด๋ ๋ชจ๋ ์ ์ญ ๋ณ์๊ฐ ๋ฉ๋๋ค.
var x = 1; // x๋ ์ ์ญ๋ณ์
if(true) {
var x = 10; // x๋ ์ ์ญ๋ณ์ ์ค๋ณต์ ์ธ์ผ๋ก var ํค์๋๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋์
}
3. ๋ณ์ ํธ์ด์คํ
var ํค์๋๋ก ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ๋ณ์ ํธ์ด์คํ ์ ์ํด ๋ณ์ ์ ์ธ๋ฌธ์ด ์ค์ฝํ์ ์ ๋๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํฉ๋๋ค. (undefined๋ก ์ด๊ธฐํ)
4. window ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋ฉ๋๋ค. (์ฐธ๊ณ ๋ก ์๋ฌต์ ์ ์ญ๋ window ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋ฉ๋๋ค.)
var score = 'Hello World';
console.log(score); // 'Hello World'
console.log(window.score); // 'Hello World' (window ์ ์ญ ๊ฐ์ฒด ์ฐธ์กฐ๋ ์๋ต์ด ๊ฐ๋ฅ)
let ํค์๋๋ก ์ ์ธ๋ ๋ณ์์ ํน์ง
1. ๋ณ์ ์ค๋ณต ์ ์ธ ๊ธ์ง
let ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ๋์ผํ ์ค์ฝํ ๋ด์์ ์ด๋ฆ์ด ๊ฐ์ ๋ณ์๋ฅผ ์ค๋ณต ์ ์ธํ๋ฉด ๋ฌธ๋ฒ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
2. ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ
let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๋ชจ๋ ์ฝ๋ ๋ธ๋ก(ํจ์, if ๋ฌธ, for ๋ฌธ, while ๋ฌธ, try/catch ๋ฌธ ๋ฑ)์ ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํ๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
let foo = 1; // ์ ์ญ ๋ณ์
{
let foo = 2; // ์ง์ญ ๋ณ์
console.log(foo) // 2
}
console.log(foo) // 1
3. ๋ณ์ ํธ์ด์คํ
let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๋ณ์ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํฉ๋๋ค.
console.log(foo) // ReferenceError: foo is not defined
let foo;
๊ทธ ์ด์ ๋ let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ "์ ์ธ ๋จ๊ณ"์ "์ด๊ธฐํ ๋จ๊ณ"๊ฐ ๋ถ๋ฆฌ๋์ด ์งํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ, ๋ฐํ์ ์ด์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด ์๋ฌต์ ์ผ๋ก "์ ์ธ ๋จ๊ณ"๊ฐ ๋จผ์ ์คํ๋์ง๋ง "์ด๊ธฐํ ๋จ๊ณ"๋ ๋ฐํ์ ์ดํ ๋ณ์ ์ ์ธ๋ฌธ์ ๋๋ฌํ์ ๋ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
let foo = 1; // ์ ์ญ ๋ณ์
{
console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
let foo = 2; // ์ง์ญ ๋ณ์
}
// ๋ง์ฝ ๋ณ์ ํธ์ด์คํ
์ด ๋ฐ์ํ์ง ์๋๋ค๋ฉด ์ ์ฝ๋์์ ์ ์ญ ๋ณ์ foo์ ๊ฐ์ ์ถ๋ ฅํด์ผ ํฉ๋๋ค.
// ํ์ง๋ง let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ฌ์ ํ ํธ์ด์คํ
์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
โ ์๋ฐ์คํฌ๋ฆฝํธ๋ ES6์์ ๋์ ๋ let, const๋ฅผ ํฌํจํ ๋ชจ๋ ์ ์ธ๋ฌธ(var, let, const, function, class ๋ฑ)์ ํธ์ด์คํ ํฉ๋๋ค. ๋จ, ES6์์ ๋์ ๋ let, const, class๋ฅผ ์ฌ์ฉํ ์ ์ธ๋ฌธ์ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํฉ๋๋ค.
4. ์ ์ญ ๊ฐ์ฒด์ let
let ํค์๋๋ก ์ ์ธํ ์ ์ญ ๋ณ์๋ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ์๋๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก winodw.foo ์ฒ๋ผ ์ ๊ทผํ ์ ์์ต๋๋ค. var ํค์๋์ ๋ค๋ฅด๊ฒ ๋ณด์ด์ง ์๋ ๊ฐ๋ ์ ์ธ ๋ธ๋ก ๋ด์ ๋ณ๋๋ก ์ ์ฅ๋์ด ๊ด๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
let foo = 1;
console.log(window.foo); // undefined
console.log(foo); // 1
const ํค์๋๋ก ์ ์ธ๋ ๋ณ์์ ํน์ง
1. ์ ์ธ๊ณผ ์ด๊ธฐํ
const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๋ฐ๋์ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌธ๋ฒ ์๋ฌ(Syntax Error)๊ฐ ๋ฐ์ํฉ๋๋ค.
2. ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ
let ํค์๋๋ก ์ ์ธํ ๋ณ์์ ๋์ผํฉ๋๋ค.
3. ๋ณ์ ํธ์ด์คํ
let ํค์๋์ ๋์ผํ๊ฒ ๋ณ์ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํฉ๋๋ค.
4. ์ฌํ ๋น ๊ธ์ง
const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ฌํ ๋น์ด ๊ธ์ง๋ฉ๋๋ค. ์ฌํ ๋น์ Type Error๊ฐ ๋ฐ์ํฉ๋๋ค.
5. ์์
const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์์์ ๋๋ค. ๋ณ์์ ์๋ ๊ฐ๋ ์ธ ์์๋ ์ฌํ ๋น์ด ๊ธ์ง๋ ๋ณ์๋ฅผ ๋งํฉ๋๋ค. ์ฃผ์ํด์ผ ํ ์ ์ const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ฌํ ๋น์ ๊ธ์งํ ๋ฟ "๋ถ๋ณ"์ ์๋ฏธํ๋๊ฒ์ด ์๋๋๋ค.
-์์ ํ์ ์ ๊ฐ : ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ(๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ, null, undefined, symbol)์ const ํค์๋๋ก ์ ์ธํ ๋ณ์์ ํ ๋นํ ๊ฒฝ์ฐ ํ ๋น๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค.
-๊ฐ์ฒด ํ์ ์ ๊ฐ : ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ(๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ)์ const ํค์๋๋ก ์ ์ธํ ๋ณ์์ ํ ๋นํ ๊ฒฝ์ฐ์๋ ํ๋กํผํฐ ๋์ ์์ฑ, ์ญ์ , ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝ์ ํตํด ๊ฐ์ฒด์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ฐ๋ฅํฉ๋๋ค.
var | let | const | |
ํธ์ด์คํ | o | o (TDZ) | o (TDZ) |
๊ฐ์ ์ฌํ ๋น | o | o | x |
๋์ผ ์ค์ฝํ ์ค๋ณต ์ ์ธ | o | x | x |
์ ์ญ ๊ฐ์ฒด window ํ๋กํผํฐ | o | x | x |
'๐ Language & CS knowledge > JavaScript (๋ชจ๋์๋ฐ์คํฌ๋ฆฝํธ Deep Dive)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
48์ฅ ๋ชจ๋ (0) | 2022.07.31 |
---|---|
47์ฅ ์๋ฌ ์ฒ๋ฆฌ (0) | 2022.07.30 |
46์ฅ ์ ๋๋ ์ดํฐ์ async/await(โป๋จ์ ๊ฐ๋ ๋ง ์ ๋ฆฌ) (0) | 2022.07.30 |
45์ฅ ํ๋ก๋ฏธ์ค(โป๋จ์ ๊ฐ๋ ๋ง ์ ๋ฆฌ) (0) | 2022.07.30 |
44์ฅ REST API(โป๋จ์ ๊ฐ๋ ๋ง ์ ๋ฆฌ) (0) | 2022.07.29 |