๐ ํธ์ด์คํ
- ๋ณ์ ์ ์ธ๋ฌธ์ด ์ฝ๋์ ์ ๋๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณ ์ ์ ํน์ง
์์
console.log(score); // undefined
var score; // ๋ณ์ ์ ์ธ๋ฌธ
- ์ธํฐํ๋ฆฌํฐ์ ์ํด ํ ์ค ์ฉ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค๋ฉด, ์์ง ์ ์ธ๋์ง ์์ socre๋ณ์๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๊ณ ์ ํ๊ณ ์์ผ๋ฏ๋ก, ReferenceError(์ฐธ์กฐ์๋ฌ)๊ฐ ๋ ์ผํจ
- ํ์ง๋ง, ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ undefined๊ฐ ์ถ๋ ฅ๋จ
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์์ค์ฝ๋๋ฅผ ํ ์ค ์ฉ ์์ฐจ์ ์ผ๋ก ์คํํ๊ธฐ์ ์์, ๋จผ์ ์์ค์ฝ๋์ ํ๊ฐ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ ์์ค์ฝ๋๋ฅผ ์คํํ ์ค๋น๋ฅผ ํจ
- ์์ค์ฝ๋ ํ๊ฐ ๊ณผ์ ์์ ๋ณ์ ์ ์ธ์ ํฌํจํ ๋ชจ๋ ์ ์ธ๋ฌธ์ ์์ค์ฝ๋์์ ์ฐพ์์ ๋จผ์ ์คํ
- var, let, const, function, function*, class ํค์๋๋ฅผ ์ฌ์ฉํด์ ์ ์ธํ๋ ๋ชจ๋ ์๋ณ์(๋ณ์, ํจ์, ํด๋์ค)๋ฑ์ ํธ์ด์คํ ๋จ
- const, let์ var์ ํธ์ด์คํ ๊ณผ๋ ๋ค๋ฅด๊ฒ ๋์ํ๋ฉฐ, TDZ(Temporal Dead Zone) ์ด๋ผ๋ ํ์์ ๊ฐ์ง๊ณ ์๋ค.
๐ ๋ณ์๊ฐ ์์ฑ๋๋ 3๋จ๊ณ
1. ์ ์ธ ๋จ๊ณ
- ๋ณ์๋ฅผ ์คํ ์ปจํ ์คํธ์ ๋ณ์ ๊ฐ์ฒด์ ๋ฑ๋ก
2. ์ด๊ธฐํ ๋จ๊ณ
- ๋ณ์ ๊ฐ์ฒด ๋ฑ๋ก๋ ๋ณ์๋ฅผ ์ํ ๊ณต๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ณด. ์ด ๋จ๊ณ์์ ๋ณ์๋ undefined๋ก ์ด๊ธฐํ
3. ํ ๋น ๋จ๊ณ
- undefied๋ก ์ด๊ธฐํ๋ ๋ณ์์ ์ค์ ๊ฐ์ ํ ๋น
* ์ผ์์ ์ฌ๊ฐ์ง๋(let, const์ ํธ์ด์คํ ๊ณผ ์ฐ๊ด)
์ ์ธ ๋จ๊ณ |
์ผ์์ ์ฌ๊ฐ์ง๋(TDZ) |
์ด๊ธฐํ ๋จ๊ณ |
ํ ๋น ๋จ๊ณ |
๐ let์์์ ํธ์ด์คํ
console.log(foo);
let foo;
//foo is not defined
- ์ ์ธ๋จ๊ณ์์ ์ด๊ธฐํ ๋จ๊ณ ์ด์ ๊น์ง ์ผ์์ ์ฌ๊ฐ์ง๋๊ฐ ์์ด์, ์ด๊ธฐํ ์ด์ ์ ๋ณ์์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์.
- ๋ฐ๋ผ์, const,let ์ ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ ์ ๋ณ์์ ์ ๊ทผํด๋ ์๋ฌ๊ฐ ๋์ง ์๋ ํ์์ ์ฐจ๋จํด์ ํธ์ด์คํ ์ด ์ผ์ด๋์ง ์๋ ๊ฒ ์ฒ๋ผ ๋ณด์ธ๋ค.
- ํ์ง๋ง ๊ทธ๋ ์ง ์๋ค. ์๋ ์์ ๋ฅผ ์ฐธ๊ณ
let foo = 1; //์ ์ญ ๋ณ์
{
console.log(foo); // ReferenceError: foo is not defined
let foo = 2; //์ง์ญ ๋ณ์
}
- ํธ์ด์คํ ์ด ์ ๋ง ๋ฐ์ํ์ง ์๋๋ค๋ฉด, ์ ์ญ ๋ณ์ foo ๊ฐ์ด ์ถ๋ ฅ๋ ๊ฒ ์ฒ๋ผ ๋ณด์. ํ์ง๋ง ์ฌ์ ํ ํธ์ด์คํ ์ด ์๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ ์๋ฌ ๋ฐ์
- let์ผ๋ก ์ ์ธ๋ ๋ณ์๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ์ด๋ฏ๋ก, ์ง์ญ ๋ณ์ foo๊ฐ ์ผ์์ ์ฌ๊ฐ์ง๋์ ๋น ์ง. ๋ฐ๋ผ์ ์ผ์์ ์ฌ๊ฐ์ง๋ ํํ๋ก ํธ์ด์คํ ์ด ๋ฐ์ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ.
์ฐธ๊ณ
1. ์ด์ ๋ชจ, ๋ชจ๋ ์์ค ๋ฅ๋ค์ด๋ธ
2. poiemaweb, let const์ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ
https://poiemaweb.com/es6-block-scope
2. ์ ๋ก์ด, const let
https://www.zerocho.com/category/ECMAScript/post/5757d74345041aaae7493479
'CS ๊ณต๋ถ - front' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ๋๊ธฐ ์ฒ๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ (0) | 2023.02.02 |
---|---|
[JS] ์ฝ๋ฐฑ ํจ์ (0) | 2023.02.02 |
[์น] cors, Cross-origin resource sharing (0) | 2023.01.29 |
[์น]์ฟ ํค, ์ธ์ , ๋ก์ปฌ์คํ ๋ฆฌ์ง, ์ธ์ ์คํ ๋ฆฌ์ง ๊ทธ๋ฆฌ๊ณ JWT (0) | 2023.01.26 |
[์น] SSR vs CSR ๊ทธ๋ฆฌ๊ณ Next.js (0) | 2023.01.24 |