์๋ ํ์ธ์. ์ ํ๋ธ์์ ์ฆ๊ฑฐ์ด ์ฝ๋ฉ ๊ฒฝํ - ์ฝ๋ฉ๋งฅ์ค(CodingMax) ์ฑ๋์ ์ด์ํ๊ณ ์๋ ์ฝ๋ฉ๋งฅ์ค์ ๋๋ค. ์ถ์ ์ด์ ๊ฐ๋ฉด์ ์๋ก์ด ์ง์์ ๋ฐฐ์ฐ๊ณ ๋๋๋ ๊ฒ์ ์ข์ ํฉ๋๋ค. ๐
๐บ https://www.youtube.com/@coding-max
ํญ์ ์ ์ตํ๊ณ ์์ฐฌ ๋ด์ฉ์ผ๋ก ์ฐพ์ ๋ต๊ฒ์!
Courses
Reviews
- Real! Javascript - From Basics to Advanced
- Real! Javascript - From Basics to Advanced
- Real! Javascript - From Basics to Advanced
- Real! Javascript - From Basics to Advanced
- Real! Javascript - From Basics to Advanced
Posts
Q&A
์ฝ๋ ์๋๋ฐ์ค ์์ค ์ ๋ ฅ์ ์ฝ์์ด ๊ณ์ ๋ฐ์ํ๋๊ฒ ๊ฐ์์.
ymckh1005๋ ์ ๋ ์ ๊ท ํ๋ก์ ํธ ์์ฑ ํ ์ฌํ์ ์ฑ๊ณตํ์ฌ ํด๋น ๋ด์ฉ์ ๋๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ๋ณด์์ต๋๋ค.์๋ ์ด๋ฏธ์ง์์ ๋นจ๊ฐ์ ์ฌ๊ฐํ์ผ๋ก ํ์ํ ๋ฒํผ๊ณผ ๋ฉ๋ด๋ฅผ ํด๋ฆญํด์ Settings ๋ก ์ง์ ํฉ๋๋ค. (์ฌ์ง) search settings ์ ๋ ฅ๋์ preview ๋ผ๊ณ ์ ๋ ฅํฉ๋๋ค.(์ฌ์ง) ๊ทธ๋ฌ๋ฉด ์ค์ ์ค์ Sandbox: Preview Run Action ์ด ์๋๋ฐ์(์ฌ์ง) ๊ธฐ๋ณธ๊ฐ์ด edit-delayed ๋ฅผ Save ๋ก ๋ณ๊ฒฝํฉ๋๋ค.(์ฌ์ง) ์ด๋ ๊ฒ ์ค์ ํ๊ณ Settings ๋ฅผ ๋ซ๊ณ ํธ์งํด ๋ณด์๋ฉด, Preview ๊ฐ ์ ๋ฐ์ดํธ ๋์ง ์๊ณ ์ ์ฅํ ๋๋ง ์ ๋ฐ์ดํธ ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์์ฒ๋ผ ํ๋๋ฐ ๋์ํ์ง ์๋๋ค๋ฉด, ํ๋ฉด์ ๋ฆฌํ๋ ์ ํ๊ฑฐ๋ ํ๋ก์ ํธ๋ฅผ ๋ซ์๋ค๊ฐ ๋ค์ ์ด์ด๋ณด๋ฉด ์ค์ ๋๋ก ๋์ํ ๊ฒ์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค ๐โโ
- 0
- 3
- 84
Q&A
์ฝ๋ ์๋๋ฐ์ค ์์ค ์ ๋ ฅ์ ์ฝ์์ด ๊ณ์ ๋ฐ์ํ๋๊ฒ ๊ฐ์์.
์๋ ํ์ธ์ ymckh1005๋, ์ธํ๋ฐ AI ์ธํด์ ๋ต๋ณ์ AI ๊ฐ ์์ฑํ์ฌ ์ ํํ์ง ์์ ๋๊ฐ ์์ต๋๋ค. ์ฐ์ ๋ถํธ์ ๋๋ ค ์ฃ์กํฉ๋๋ค.์ ๊ฐ MacOS ํ๊ฒฝ์ ํฌ๋กฌ์์ ์ฝ๋ ์๋๋ฐ์ค๋ฅผ ์คํํ๋ฉด, ์ฝ๋๋ฅผ ์์ฑํ ๋๋ console.log๊ฐ ๋ฐ์ํ์ง ์๊ณ Cmd+S ๋ฅผ ๋๋ ์ ๋์๋ง ์๋ํ์ต๋๋ค. ymckh1005๋์ด ๊ฒช์ผ์ ๋ถํธ์ ์ ๊ฐ ์ฌํํ์ง ๋ชปํ ์ด์ ๊ฐ ์ฝ๋์๋๋ฐ์ค ์ ๋ฐ์ดํธ๊ฐ ์ฆ์์ ์๊ธด ๋ฒ๊ทธ ์ผ ์ ์์ต๋๋ค. ์ฒ์ ๋ฌธ์ ์ฃผ์ ๊ฒ์ฒ๋ผ ๋ก์ปฌ์ ์์ ํ๊ฒฝ์ ๋ง๋ค๊ณ VSCode ๋ก ์์ ์ ์งํํ์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. ๊ด๋ จํ์ฌ ์๋ ์์๋ค์ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ๐โโ๋ก์ปฌ ์์ ํ๊ฒฝ์ ์ํ nodejs ์ค์นํ๊ธฐ nvm ์ผ๋ก nodejs ์ค์นํ๊ธฐ Parcel๋ก ๋ก์ปฌ ์์ ํ๊ฒฝ ๋ง๋ค๊ธฐVite๋ก ๋ก์ปฌ ์์ ํ๊ฒฝ ๋ง๋ค๊ธฐ
- 0
- 3
- 84
Q&A
๋ฐฐ์ด ์์ฑ์๋ก ๋ฐฐ์ด ์์ฑ์ empty์ undefined
์๋ ํ์ธ์. 807์ฐ๊ตฌ์ค๋! ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.๋จผ์ ํ์ผ์๋ ์ ๊ฐ ๋ต๋ณ์ ๋นจ๋ฆฌ ๋ชป ๋๋ฆฌ๋ ์ ์ํด ๋ถํ๋๋ฆฝ๋๋ค.๋ฐฐ์ด ์์ฑ์๋ก ์์ฑ์ empty ์ undefined ์ ๊ดํด์ ์ง๋ฌธ ์ฃผ์ จ๋๋ฐ์. ๋จผ์ ๋ต๋ณ์ ๋๋ฆฌ๋ฉด, empty ์ undefined ๋ ์๋ก ๋ค๋ฅธ ๊ฒ์ ๋๋ค.์๋ฐ์คํฌ๋ฆฝํธ์์ undefined ๋ ์์ฐํ ๊ฐ์ ๋๋ค. ๊ฐ์ ์ค์ V8์ undefined, null ๊ทธ๋ฆฌ๊ณ string ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊น ํธ์ ๋ณด์๋ฉด, undefined ๊ฐ ์ด๋ป๊ฒ ์์ฑ๋๊ณ ๊ด๋ฆฌ๋๋์ง ์์ค ์ ์์ต๋๋ค.๊ทธ๋ ๋ค๋ฉด ๋ฐฐ์ด์ ์์ฑ์๋ก ์์ฑ์ empty ๋ ๋ฌด์์ธ์ง ์ข ๋ ์์ ๋ณด๊ฒ ์ต๋๋ค.์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ฐฐ์ด ์์ฑํ ๋, ์ฐ๋ฆฌ๋ ๊ฝ ์ฐฌ ๋ฐฐ์ด๊ณผ ๊ตฌ๋ฉ์ด ์กด์ฌํ๋ ๋ฐฐ์ด์ ์์ฑํ ์ ์์ต๋๋ค.// ๊ฝ ์ฐฌ ๋ฐฐ์ด const array = [1, 2, 3];// ๊ตฌ๋ฉ์ด ์๋ ๋ฐฐ์ด, ์ผ๋ช Sparse Array const array = new Array(3);Sparse Array ๋ ๋ชจ๋ ์ธ๋ฑ์ค์ ํ ๋น ๋ ๊ฐ์ด ์์ ์ ์๋ ๋ฐฐ์ด์ ๋งํฉ๋๋ค. ์ฆ, ๊ตฌ๋ฉ์ด ์๋ ๋ฐฐ์ด์ด์ฃ . ์๋ฅผ ๋ค์ด, 1๋ฒ ์ธ๋ฑ์ค์ ๊ฐ์ด ์๋ ๋ฐฐ์ด์ ์๋์ ๊ฐ์ต๋๋ค.[0, ,2]์ ํ๊ธฐ๋ฒ์์ ๊ฐ์ด ํ ๋น๋์ง ์์๋ค๋ ๊ฒ์ ํ์ํ๊ธฐ ์ํด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ empty ๋ฅผ ์ฌ์ฉํฉ๋๋ค.[0, empty, 2]์ด์ ๋ค๋ฅด๊ฒ, ์๋ ๋ฐฐ์ด์ 1๋ฒ ์ธ๋ฑ์ค์ undefined ๋ผ๋ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋๋ค.[0, undefined, 2]์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ด ์๋ค๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ์๋ค๋ ๊ฒ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ empty ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ์ง ์์ ๊ฒ(๋ฐฐ์ด์ ์ฌ๋กฏ)์ ์๋ฏธํฉ๋๋ค.์ค์ํ ๊ฒ์ ์ ์ด๋ ๊ฒ ๋์ด์ผ ํ์๊น๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋๋ค.์ฌ์ค ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด์ ๊ฐ์ฒด์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ํํ ์๋์ฒ๋ผ ๊ฐ์ฒด ๋ฆฌํฐ๋ด๋ก ํ์ํ๋ ๋ฐ๋ก ๊ทธ ๊ฐ์ฒด์ ๋๋ค.const obj = {};[1, 2, 3] ์ ๊ฐ์ฒด๋ก ํํํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.const arrayObj = { 0: 1, 1: 2, 2: 3 }์ฆ, ์ธ๋ฑ์ค๋ฅผ ์์ฑํค ์ด๋ฆ์ผ๋ก ๊ฐ๋ ๊ฐ์ฒด์ ๋๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์ด ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.arrayObj[0] // 1 ์ ๋๋ค. arrayObj[1] // 2 ์ ๋๋ค. arrayObj[2] // 3 ์ ๋๋ค.์ฌ๊ธฐ์ ์ถ๊ฐ๋ก length ๋ผ๋ ์์ฑ์ ์ถ๊ฐํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด๊ณผ ๋น์ทํ ๊ฐ์ฒด๋ผ๊ณ ํด์ array-like object ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.const arrayLikeObj = { 0: 1, 1: 2, 2: 3, length: 3 }array-like object ๋ ํน๋ณํ ๊ฒ์ด ์์ง๋ง, Array.from ๋ฑ์ ํตํด์ Array ๊ฐ์ฒด๋ก ์ฝ๊ฒ ๋ณํํ ์ ์์ต๋๋ค.Array.from์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก, iterable ๋๋ arrayLike ๊ฐ์ฒด๋ฅผ ๋ฐ์์ ๋ฐฐ์ด๋ก ๋ฐํํฉ๋๋ค.๊ทธ๋์ ์๋์ ๊ฐ์ด ํ๋ฉด ๋น ๋ฐฐ์ด์ด ๋ฐํ๋ฉ๋๋ค.Array.from({ 0: 1, 1: 2, 2: 3, }) // [] ์ด ๋ฐํ๋ฉ๋๋ค.ํ์ง๋ง length ๋ฅผ ์ถ๊ฐํ๋ฉด [1, 2, 3] ๋ฐฐ์ด์ด ๋ฐํ๋ฉ๋๋ค.Array.from({ 0: 1, 1: 2, 2: 3, length: 3 }); // [1, 2, 3] ์ด ๋ฐํ๋ฉ๋๋ค.๋ํ์ ์ธ Array Like ๊ฐ์ฒด๊ฐ function ๊ฐ์ฒด์ arguments ์ ๋๋ค. function ํจ์ ๊ฐ์ฒด๊ฐ ๋ฐ๋ ์ธ์๋ฅผ Array Like ๊ฐ์ฒด ํํ๋ก ๋ด๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ document ์ querySelectorAll ์ด ๋ฐํํ๋ NodeList ๋ Array Like ๊ฐ์ฒด์ ๋๋ค.const nodeList = document.querySelectorAll('div'); Array.isArray(nodeList); // false 'length' in nodeList; // true์ด๋ ๋ฏ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ๋ฐฐ์ด์ ํํํฉ๋๋ค. C์ธ์ด์ ๊ฐ์ ์ธ์ด์์๋ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ญ์ด ๋ฐฐ์ด์ธ ๊ฒ๊ณผ ๋ค๋ฅธ ์ ์ ๋๋ค.๊ทธ๋ ๋ค๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด์ด ์ sparse array ์ฆ, ๊ตฌ๋ฉ์ด ์กด์ฌํ ์ ์๋ ๋ฐฐ์ด์ธ์ง ์ดํดํ ์ ์์ต๋๋ค.์๋์ ๊ฐ์ด ๋ฐฐ์ด์ ์์ฑํด ๋ด ์๋ค.const bigArray = new Array(1000000000);10์ต ๊ฐ์ ๋๋ค. ์ฐธ๊ณ ๋ก ๋ฐฐ์ด ์์ฑ์๋ก ์์ฑํ ์ ์๋ ์ต๋ ๊ธธ์ด๋ 2^32 - 1 ๊ฐ์ ๋๋ค. ๋ฐฐ์ด์ด ๊ธธ์ด๊ฐ 32๋นํธ ๋ถํธ ์๋ ์ ์๋ก ํํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐฐ์ด ์์ฑ์๋ก 10์ต๊ฐ๋ฅผ ์์ฑํ ๋, ๋ชจ๋ ์์์ ๋ํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? 1๊ฐ์ ์์๊ฐ 1byte ๋ง ์ฐจ์งํด๋ 0.9 GB ๋ก ์ฝ 1GB ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.const bigArray = { 0: ์ด๋ค๊ฐ, 1: ... ... 999999999: ์ด๋ค๊ฐ }์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์์ด ๋ธ๋ผ์ฐ์ ์์์ ์คํ๋๋ ์์ ์คํฌ๋ฆฝํธ ์ธ์ด์์ต๋๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ์ ํ๋ก์ธ์ค ๋ด๋ถ์์ ์คํ๋๋ ๊ฒ์ด์์ฃ . ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์์ฒ๋ผ ํฌ๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ฉด, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ป๊ฑฐ๋ ๊บผ์ง๊ฑฐ๋ ํ๋ ์ผ์ด ๋ฐ์ํ ๊ฒ์ ๋๋ค.๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์ ์๋๊ฐ ๋งค์ฐ ๋๋ ค์ก์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฝค ์ค๋์ ์ ํ์ํ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์, ๊ทธ ๋น์ PC๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ์ง ์์์ต๋๋ค.๋ชจ๋ ๋ฐฐ์ด ์์ฑ์ ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค์ ์ํฅ์ ์ฃผ์ง ์์์ฑ ์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ๋ถ๊ฐ๋ฅํ์ ๊ฒ์ ๋๋ค.๊ทธ๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด๋ก ๋ฐฐ์ด์ ํํํ๊ณ , ๊ฐ์ฒด์ ํค๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๊ธฐ๋ก ํ ๊ฒ์ ๋๋ค.๊ทธ๋์ ์๋์ ๊ฐ์ ์ผ์ด ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค.const arr = [1, 2, 3]; arr[999999999] = 10;arr ์ ์๋์ ๊ฐ์ด ๊ตฌ๋ฉ์ด ์กด์ฌํ๋ sparse array ๊ฐ ๋๋ ๊ฒ์ด์ฃ .[1, 2, 3, empty ร 999999996, 10]์ฆ, 1, 2, 3, 10 ์ ์ ์ธํ๊ณ ๋ค๋ฅธ ์๋ฆฌ(์ฌ๋กฏ)์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ง ์์ ๊ฒ์ ๋ํ๋ด๋ empty ๋ฅผ ํ์ํ๋ ๊ฒ์ ๋๋ค.์ ์ฌ๊ธฐ์ ํ์ธํด ๋ณผ ๋ด์ฉ์ ์์์ ์์ฑํ arr์ ๊ธธ์ด๋ ๋ช ์ผ๊น์?arr.length // 1000000000 ์ ๋๋ค.์ฆ, arr ์ ๊ฐ์ฒด๋ก ํํํ๋ฉดconst arr = { 0: 1, 1: 2, 2: 3, 999999999: 10, length: 4 }๊ฐ ์๋๋ผconst arr = { 0: 1, 1: 2, 2: 3, 999999999: 10, length: 1000000000 }๋ผ๋ ์ ์ ๋๋ค. ์๋ ์ฝ๋๋ฅผ ์คํํ๋ฉด,arr.forEach((value, i) => console.log(value, i)); 1 0 2 1 3 2๊น์ง๋ ๋นจ๋ฆฌ ์ถ๋ ฅ๋์ง๋ง, ์กฐ๊ธ ์๊ฐ์ด ์ง๋ ํ์10 999999999์ด ์ถ๋ ฅ๋ฉ๋๋ค. ์ฆ, forEach ๋ length ํ์๋งํผ ์คํํ์ง๋ง, empty ์ ๋ํด์๋ ์ฝ๋ฐฑํจ์๋ฅผ ์คํํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.๋ง์ฝ empty ๋์ ์ undefined ๋ฅผ ๊ฐ๊ณ ์๋ค๊ณ ํด ๋ณผ๊ฒ์.const bigArr = new Array(1000000000).fill(undefined);์ ์ฝ๋๋ฅผ ์คํํด ๋ณด์๋ฉด, ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ป๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. 10์ต๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค๊ฐ ๋ป๋ ๊ฒ์ด์ฃ .(์ฌ์ง) ์ด๋ ๊ฒ ํด์ sparse array ์์ empty ์ undefined ๊ฐ ์๋ก ๋ค๋ฅด๋ค๋ ๊ฒ๊ณผ empty ์ ์๋ฏธ, ๊ทธ๋ฆฌ๊ณ sparse array ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ํ๋ ์ญ์ฌ์ ์ธ ๋ด์ฉ ๋ฑ์ ๊ฐ์ด ์์ ๋ณด์์ต๋๋ค.๋ต๋ณ์ด ๋์์ด ๋์๊ธธ ๋ฐ๋๋๋ค.๊ฐ์ฌํฉ๋๋ค.๋ต๋ณ์ ์ ๊ณ ์์ ์ ํ์ธํด ๋ณด๋ ์์ ์ค์์๋ ์๋ ์ฝ๋๊ฐ undefined ๋ก ์ด๊ธฐํ ๋ ๋ฐฐ์ด์ ์ถ๋ ฅํ๊ณ ์์๋ค์. const fiveItems = new Array(5); console.log(fiveItems); // [undefined, undefined, undefined, undefined, undefined]ํ์ง๋ง ์ด๋ ์ฝ๋์๋๋ฐ์ค์ ๋ณด์ ์ผ๋ก ์๋์ ๊ฐ์ด ์คํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.const fiveItems = new Array(5).fill(undefined); console.log(fiveItems);์๋ฌด๋๋ Babel ์ ํธ๋์คํ์ผ๋ฌ ์ํฅ์ธ ๊ฒ ๊ฐ์ต๋๋ค.๋ง์ฝ ๋ณด์ ์ด ์๋ค๋ฉด,const fiveItems = new Array(5); console.log(fiveItems);๋ ์๋์ ๊ฐ์ด empty ๊ฐ 5๊ฐ ์๋ sparse array ๊ฐ ๋์ด์ผ ํฉ๋๋ค.[empty x 5]ํผ๋์ ๋๋ฆฐ ์ ์ฃ์กํฉ๋๋ค. ๊ด๋ จ ์ ์ ๋ด์ฉ์ ์์ ๋ ธํธ๋ก ์ถ๊ฐํ์์ต๋๋ค.๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 79
Q&A
nvm ์ค์น ์ค๋ฅ์ ๋๋ค.
ttyykim๋ ์๋์ฐ๋ฅผ ์ฌ์ฉํ๊ณ ๊ณ์ ๊ตฐ์ ๊ทธ๋ ๋ค๋ฉด, nvm-windows ๋ฅผ ์ค์นํ์ ์ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค. ์๋ ์ฃผ์์ Release ํ์ด์ง์์ ๋ค์ด๋ก๋ ํ์ค ์ ์์ต๋๋ค.https://github.com/coreybutler/nvm-windows1.2.2 ์ต์ ๋ฒ์ ์ด์ด์ ์๋ ์ฃผ์๋ก ๊ฐ์ ์ nvm-setup.exe ๋ฅผ ๋ฐ์์ ์ค์นํด ์ฃผ์ธ์!https://github.com/coreybutler/nvm-windows/releases/tag/1.2.2(์ฌ์ง)์ค์น ํ ์๋ ๋ช ๋ น์ด ์ ๋ ฅ์ผ๋ก nvm ๋ฒ์ ์ด ์ ์ถ๋ ฅ๋๋ฉด, ์ค์น๊ฐ ์๋ฃ๋ ๊ฒ์ ๋๋ค.nvm --version๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 197
Q&A
console ์ด ์๋ณด์ ๋๋ค.
์๋ ํ์ธ์. ttyykim ๋ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.์ฝ๋๋ฐ์ค๊ฐ ์์ฃผ ์ ๋ฐ์ดํธ ๋์ด UI ๊ตฌ์ฑ์ด ๊ฐ์์ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ฐ์ ์ฝ์์ ์๋ ์์๋ก ํ์ธํ์ค ์ ์์ต๋๋ค.(์ฌ์ง) ์์ ์ ์ฝ๋์๋ ๋ฐ์ค๋ก ์งํํ๊ณ ์์ง๋ง ๋ก์ปฌ์ ์์ ํ๊ฒฝ์ ๋ง๋ค๊ณ ๊ฐ์๋ฅผ ์๊ฐํ์ ๋ ๊ด์ฐฎ์ต๋๋ค.์น์ 3์์ ๋ก์ปฌ ํ๊ฒฝ์์ ์๊ฐ ํ๊ฒฝ ๋ง๋ค๊ธฐ ๋ด์ฉ์ด ์์ผ๋ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 94
Q&A
then ๋ฉ์๋์์ Promise ๋ฅผ ๋ฐํํ๋ ์ฝ๋์ ๋ํ ์ง๋ฌธ์ ๋๋ค.
์๋ ํ์ธ์. Droid ๋ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๐then() ๋ฉ์๋์ ๋ฐํ๊ฐ์ ์ข ๋ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. new Promise((resolve, reject) => { resolve(10); }) ํ๋ฉด ๊ฒฐ๊ณผ๋ก fulfilled ์ํ์ Promise ๊ฐ ๋ฐํ๋๋ ๊ฒ์ ์์ค ๊ฒ์ ๋๋ค. Promise {: undefined} [[Prototype]]: Promise [[PromiseState]]: "fulfilled" [[PromiseResult]]: undefined ํด๋น ๋ด์ฉ์ ์๋ ๊ฐ์ข์์ ๋ค๋ฃจ์์ต๋๋ค.Promise์ 3๊ฐ์ง ์ํPromise ๋ฉ์๋ ์ฒด์ด๋๊ฐ์ข์์๋ then() ๋ฉ์๋์์ Promise ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ๋ง ๋ค๋ฃจ์๋๋ฐ์. ์๋์ ๊ฐ์ด ์ผ๋ฐ ๊ฐ์ ๋ฐํํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? new Promise((resolve, reject) => { resolve(10); }) .then((value) => { return value * 2; }) ์ด ๋์๋ fulfilled ์ํ์ Promise ๊ฐ ๋ฐํ๋ฉ๋๋ค. Promise {: 20} [[Prototype]]: Promise [[PromiseState]]: "fulfilled" [[PromiseResult]]: 20 Promise ๊ฐ ์๋ ๊ฐ์ ๋ฐํํ๋๋ฐ Promise ๊ฐ ๋ฐํ๋ฉ๋๋ค. ์ด ๊ฒ์ then() ๋ฉ์๋์์ ์ผ๋ฐ ๊ฐ์ ๋ฐํํ ๊ฒฝ์ฐ, ์๋์ผ๋ก Promise.resolve ๋ก ํ ๋ฒ ๊ฐ์ธ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ, ์๋์ ๊ฐ์ ๊ฒ์ด์ฃ . new Promise((resolve, reject) => { resolve(10); }) .then((value) => { return Promise.resolve(value * 2); }) ๊ทธ๋์ ์๋์ ๊ฐ์ด ๊ณ์ then() ๋ฉ์๋๋ฅผ ์ฒด์ด๋ํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. new Promise((resolve, reject) => { resolve(10); }) .then((value) => { return Promise.resolve(value * 2); }) .then((value) => console.log(`๊ฐ์ด ๋์ฐฉํ์ต๋๋ค. ${value}`))์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ ๊ฒฝ์ฐ๋ ์ด๋จ๊น์? ์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๊ฐ ์๋ฌด ๊ฒ๋ ๋ฐํํ์ง ์๋๋ผ๋ undefined ๋ฅผ ๋ฐํํฉ๋๋ค. function a() {} a() // undefined ๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์ด then ๋ฉ์๋์์ ์๋ฌด ๊ฒ๋ ๋ฐํํ์ง ์๋๋ผ๋ new Promise((resolve, reject) => { resolve(10); }) .then((value) => { console.log(value); }) undefined ๊ฐ ๋ฐํ๋๊ณ then ์์ ๋ฐํ๋ ๊ฐ์ ์๋์ผ๋ก Promise.resolve() ๋ก ๊ฐ์ธ์ง๋๋ค. new Promise((resolve, reject) => { resolve(10); }) .then((value) => { console.log(value); return Promise.resolve(); }) ์ ์ฝ๋์ฒ๋ผ ์คํ๋ฉ๋๋ค. ๊ทธ๋์ ๋ฐํ๊ฐ์ผ๋ก undefined ๋ฅผ PromiseResult ๋ก ๊ฐ๋ fulfilled ์ํ์ Promise ๊ฐ ๋ฐํ๋๋ ๊ฒ์ ๋๋ค. Promise {: undefined} [[Prototype]]: Promise [[PromiseState]]: "fulfilled" [[PromiseResult]]: undefined ๋ง์ฝ ์ผ๋ฐ ๊ฐ์ด ์๋ Error ๋ฅผ throw ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? new Promise((resolve, reject) => { resolve(10); }) .then((value) => { throw new Error('์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค'); }) ์ด ๋๋ ์ํ๊ฐ 'rejected' ์ธ Promise ๊ฐ ๋ฐํ๋ฉ๋๋ค. Promise {: Error: ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.} [[Prototype]]: Promise [[PromiseState]]: "rejected" [[PromiseResult]]: Error: ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ฆ, ์ผ๋ฐ๊ฐ์ ๋ฐํํ๊ฑฐ๋ ์ค๋ฅ๋ฅผ throw ํ๋ฉด ์๋์ผ๋ก Promise ๋ก ๊ฐ์ธ์ง๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Promise ์ ๋ฉ์๋์ธ then ๋๋ catch ๋ฅผ ์ฒด์ด๋์ ํตํด์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋๋ค.์ ๊ทธ๋ผ ์๋ก์ด Promise ๋ฅผ ๋ฐํํ ๋๋ ์ธ์ ์ธ๊ฐ์? ์๋ก์ด ๋น๋๊ธฐ ์์ ์ด ํ์ํ ๋์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋, ์ฃผ์ ๊น๊ฒ ์๊ฐํด ๋ณผ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.๋ง์ฝ Promise ๋ฅผ ๋ฐํํ๋๋ฐ ์ผ๋ฐ๊ฐ์ด๋ ์ค๋ฅ throw ์ผ ๋์ฒ๋ผ Promise ๋ก ๊ฐ์ธ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? new Promise((resolve, reject) => { resolve(10); }) .then((value) => { return new Promise((resolve, reject) => { setTimeout(() => resolve(value * 2), 1000); }); }) ๋ง์ฝ then ๋ฉ์๋๊ฐ ๋ฐํํ๋ Promise ๋ฅผ ๋ค์ Promise ๋ก ๊ฐ์ผ๋ค๋ฉด, Promise, Error> ์ฒ๋ผ ๋ ๊ฒ์ ๋๋ค. ์ฆ, ๋ฐฐ์ด์ ๋ฐฐ์ด์ฒ๋ผ [array, [of, [array]]] Promise ๊ฐ ๊ณ์ ์์ด๊ฒ ๋๋ ๊ฒ์ ๋๋ค.๊ทธ๋ ๊ฒ ๋๋ฉด ๋ค์ then() ์์ ์๋์ ๊ฐ์ด ์ฌ์ฉํด์ผ ํ ๊ฒ ์ ๋๋ค. new Promise((resolve, reject) => { resolve(10); }) .then((value) => { return new Promise((resolve, reject) => { setTimeout(() => resolve(value * 2), 1000); }); }) .then((if_promise) => { if_promise.then(value => { console.log(value); }) }) ํ์ง๋ง ๋ญ๊ฐ ์ด์ํ์ง ์๋์? ๋ค ๊ทธ๋ ์ต๋๋ค. ๋ง์ฝ Promise ๋ฅผ ์์ฒ๋ผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด '์ฝ๋ฐฑํฌ'์์ ๋ฐ์ํ๋, ๊น์ด๊ฐ ๊น์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ค์ ๋ฐ์ํฉ๋๋ค.๊ทธ๋์ Promise ๋ [array, [of, [array]]] ์ flat() ๋ฉ์๋์ฒ๋ผ ์ค์ฒฉ๋ Promise ๋ฅผ flat ํ๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ์๋์ผ๋ก ์ ๊ณตํฉ๋๋ค. ['array', ['of', ['array']]].flat(Infinity) // ์ถ๋ ฅ๊ฒฐ๊ณผ ['array', 'of', 'array'] ๊ทธ๋์ ์๋์ ๊ฐ์ด then() ๋ฉ์๋์์ Promise ๋ฅผ ๋ฐํํ๋ฉด, new Promise((resolve, reject) => { resolve(10); }) .then((value) => { return new Promise((resolve, reject) => { setTimeout(() => resolve(value * 2), 1000); }); }) Promise, Error> ๊ฐ flat ๋์ด Promise ๊ฐ ๋ฐํ๋ฉ๋๋ค. ๊ทธ๋์ ๊ฒฐ๊ณผ๊ฐ ์๋์ ๊ฐ์ฃ . Promise {} [[Prototype]]: Promise [[PromiseState]]: "fulfilled" [[PromiseResult]]: 20 PromiseResult ๋ก ๊ฐ์ 20์ด ์์ง๋ง, Promise ๊ฐ pending ์ํ์ ์๊ธฐ ๋๋ฌธ์, then ์ ํตํด์ ๊ฐ์ ์ป์ด์ผ ํฉ๋๋ค. new Promise((resolve, reject) => { resolve(10); }) .then((value) => { return new Promise((resolve, reject) => { setTimeout(() => resolve(value * 2), 1000); }); }) .then((value) => console.log(value)); ๊ทธ๋ฌ๋ฉด, 1์ด ๋ค์ ์ฝ์์ '20' ์ด ์ถ๋ ฅ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ ๋ฆฌํด ๋ณด๋ฉด, Promise ๋ then ๋ฉ์๋๋ catch ๋ฉ์๋์์ ์ผ๋ฐ๊ฐ์ ๋ฐํํ๊ฑฐ๋ Error ๋ฅผ throw ํ๋ฉด Promise ๋ก ์๋์ผ๋ก ๊ฐ์ธ์ ๋ฐํํฉ๋๋ค. ๊ทธ๋์ then ์ด๋ catch ๋ฅผ ์ฌ์ฉํด์ ๊ณ์ ์ฒด์ด๋์ ์ด์ด๊ฐ ์ ์์ต๋๋ค.๊ทธ๋ฆฌ๊ณ then ๋ฉ์๋๋ catch ๋ฉ์๋์์ Promise ๋ฅผ ๋ฐํํ๋ฉด ์๋์ผ๋ก flat ์ ์คํํด ์ค์ฒฉ์ด ์๋ Promise ๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋์ ์ฝ๋ฐฑํฌ์์ ๋ํ๋๋ ๊น์ด๊ฐ ๊น์ด์ง๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.์ฌ๊ธฐ์์ ์ ๊น ๋์จ Promise ๋ฅผ ๋ฐํํ๋ฉด ์๋์ผ๋ก flat ์ ์คํํด ์ค์ฒฉ์ด ์๋ Promise ๋ฅผ ๋ฐํํ๋ ๋ด์ฉ์ ๋ชจ๋๋์ map ๊ณผ flatMap ๊ณผ ๋น์ทํฉ๋๋ค. ์ฆ, Promise ์ then ์ด map ์ฐ์ฐ์์ ๋น์ทํ๋ฉด์๋ ๋ฐํ๊ฐ์ ๋ํด์๋ flatMap ๊ธฐ๋ฅ์ ์ํํด ์ฃผ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค.์ฐธ๊ณ ๋ก, ๋ชจ๋๋์ ๋ํ ๋ด์ฉ์ Result ํ์ ๊ณผ ๋ชจ๋๋ ๊ฐ์ข์์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.https://www.inflearn.com/courses/lecture?courseId=331739&unitId=182191&subtitleLanguage=ko๋ต๋ณ์ด ๋์ ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 100
Q&A
for ๋ฌธ์์ var ํค์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋์ let ํค์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋ ์ฐจ์ด์
์๋ ํ์ธ์ Droid ๋! ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค ๐ ํด๋น ๋ด์ฉ์ ํ์ฌ ์๊ฐํ๊ณ ๊ณ์ ๊ฐ์ข ์ค ์๋ ๊ฐ์ข์์ ์์ธํ ๋ด์ฉ์ ์ค๋ช ํ๊ณ ์์ต๋๋ค. ๋ณ์ ์ค์ฝํ(ํจ์ ์ค์ฝํ์ ๋ธ๋ก ์ค์ฝํ) ๊ทธ๋ฆฌ๊ณ VAR ๋ณ์์ ๋ฌธ์ ์ 1ํธ ๐๊ฐ์ข์ 10๋ถ์ ๋ ์์น์ for ๋ฌธ์ let ๋ณ์๊ฐ ์ด๋ป๊ฒ ๋ฐ์ธ๋ฉ์ด ๋๋์ง ๊ทธ๋ฆฌ๊ณ setTimeout ์ ์ฝ๋ฐฑํจ์์ ์ด๋ป๊ฒ ์บก์ณ๋ง์ด ๋๋์ง ์ค๋ช ์ ํ๊ณ ์์ต๋๋ค.ํจ์ ์คํ ์ปจํ ์คํธ 2ํธ - ๋ค์ ๋ณด๋ ํจ์ ์ค์ฝํ์ ๋ธ๋ก ์ค์ฝํ๐ ํจ์ ์คํ ์ปจํ ์คํธ๋ฅผ ๋ค๋ฃจ๋ฉฐ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ข ๋ ์์ธํ๊ฒ ์ค๋ช ํ๊ณ ์์ต๋๋ค. ์ค์ฝํ ์ฒด์ด๋(Scope Chaining)์ ์ธ์ ์คํ๋ ๊น? ์ ๊ด๋ จ๋ ์ค์ํ ๋ฌธ์ ์ ํด๊ฒฐ๋ฒ๐์ถ๊ฐ๋ก ์ด ๊ฐ์๋ ๊ฐ์ด ๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค ๊ฐ์ฌํฉ๋๋ค ๐
- 0
- 1
- 91
Q&A
Global ์ค์ฝํ ์ง๋ฌธ
์๋ ํ์ธ์! ํ์ค๋! ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.ํ์ค๋์ด ์ดํดํ์ ๋ด์ฉ์ด ๋ง์ต๋๋ค. ๊ฑฐ๊ธฐ์ ์ฝ๊ฐ ์ด์ ๋ถ์ฌ ์ค๋ช ์ ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธ๋ก๋ฒ ์ค์ฝํ๋ ํ๋์ด์ง๋ง ์ดํด๋ฅผ ๋๊ธฐ ์ํด var ๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ ๊ธ๋ก๋ฒ ์ค์ฝํ๊ฐ ์๊ณ let ๊ณผ const ๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ ๊ธ๋ก๋ฒ ์ค์ฝํ๊ฐ ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.var ๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ ๊ธ๋ก๋ฒ ์ค์ฝํ๋ฅผ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ window ๊ฐ์ฒด๊ฐ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์ฆ, window ๊ฐ์ฒด์ ์์ฑ์ด ๋ฉ๋๋ค.let ๊ณผ const ๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ ๊ธ๋ก๋ฒ ์ค์ฝํ๋ ES6์ ๋์ ๋ ๊ฒ์ผ๋ก Script ์ค์ฝํ๋ผ๊ณ ๋ ํฉ๋๋ค. ์ฆ, window ๊ฐ์ฒด์ ์์ฑ์ด ๋์ง ์์ต๋๋ค.๊ทธ๋ฆฌ๊ณ ES6 ์ ๋ชจ๋ ์ค์ฝํ๊ฐ ์์ต๋๋ค. () ๋ก ๋ง๋ค์ ์๊ณ ๊ธ๋ก๋ฒ ์ค์ฝํ๋ฅผ ์ค์ผ์ํค์ง ์๋ ๋ชจ๋๋ง์ ๋ ๋ฆฝ ์ค์ฝํ๊ฐ ๋ง๋ค์ด ์ง๋๋ค.์ ์ญ ์ค์ฝํ (Global Scope) โโโ var ๋ณ์ (์ ์ญ ๊ฐ์ฒด์ ์์ฑ์ผ๋ก ๋ฑ๋ก) โ โโโ window.variableName์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅ โโโ let, const ๋ณ์ (์ ์ญ ๊ฐ์ฒด์ ์์ฑ์ด ์๋) => Script ์ค์ฝํ โ โโโ window.variableName์ผ๋ก ์ ๊ทผ ๋ถ๊ฐ โโโ ๋ชจ๋ ์ค์ฝํ (Module Scope) โโโ ์ ์ญ ์ค์ฝํ์ ๋ถ๋ฆฌ๋ ๋ ๋ฆฝ์ ์ธ ์ค์ฝํ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.(์ฌ์ง)์ ์ด์ฏค์์ ๊ธ๋ก๋ฒ ์ค์ฝํ๊ฐ ๋ฌด์์ผ๊น์? ์ด๋ค ์ฑ๊ฒฉ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ผ๊น? ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.๊ธ๋ก๋ฒ ์ค์ฝํ์ ์ ์ธํ ๋ณ์๋ ๋ธ๋ก์ด๋ ํจ์ ๋ธ๋ก์ ๋์ผํ ์ด๋ฆ์ ๋ณ์๊ฐ ์์ ๋, ์ด๋ ํจ์๋ ๋ธ๋ญ์์ ์ฐธ์กฐํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.์์ ๋ฅผ ๋ค๋ฉด ์๋์ ๊ฐ์ต๋๋ค.// Global Scope (Window Object) var globalVar = "I'm a global variable"; // Script Scope let scriptLet = "I'm a script-scoped variable"; const scriptConst = "I'm a script-scoped constant"; function outerFunction() { // Outer Function Scope let outerVar = "I'm in the outer function"; function innerFunction() { // Inner Function Scope let innerVar = "I'm in the inner function"; { // Block Scope :: ์ฌ๊ธฐ let blockVar = "I'm block-scoped"; const blockConst = "I'm a block-scoped constant"; console.log(blockVar); // ์ ๊ทผ๊ฐ๋ฅ console.log(innerVar); // ์ ๊ทผ๊ฐ๋ฅ console.log(outerVar); // ์ ๊ทผ๊ฐ๋ฅ console.log(scriptLet); // ์ ๊ทผ๊ฐ๋ฅ console.log(globalVar); // ์ ๊ทผ๊ฐ๋ฅ } // ์ ๊ทผํ ์ ์์ต๋๋ค. // console.log(blockVar); } innerFunction(); } outerFunction(); console.log(globalVar); console.log(scriptLet); ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ Block Scope :: ์ฌ๊ธฐ ์์ globalVar ๋ณ์๋ฅผ ์ ๊ทผํ ์ ์๋ ๊ฒ์ผ๊น์?๋ฐ๋ก ์ค์ฝํ ์ฒด์ธ์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋, ํด๋น ๋ณ์๋ฅผ ๋จผ์ ์ฐพ์์ ์ฐธ์กฐํด์ผ ํฉ๋๋ค.๊ทธ๋์ผ ๋ณ์์ ๊ฐ์ ์ฝ๊ฑฐ๋ ๋ณ์์ ๊ฐ์ ์ธ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.globarVar ๋ ์ด๋ ๊น์ด์ ์๋ ๋ธ๋ญ(ํจ์ ๋ธ๋ญ ํฌํจ)์ด๋๋ผ๋ ์์ ์ ํฌํจํ์ฌ ์์ ๋ธ๋ญ์ ๋์ผํ ์ด๋ฆ์ ๋ณ์๊ฐ ์๋ํ ์ ๊ทผํ ์ ์์ต๋๋ค.๋ง์น ์ฐ๋ฆฌ๊ฐ ๋๊ตฌ๋ ์๋ ์คํ๋ฅผ ๊ธ๋ก๋ฒ ์คํ๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ฒ๋ผ globarVar ๋ ์ด๋ ๋ธ๋ญ์์๋ ์ฐธ์กฐํ ์ ์์ฃ .๊ทธ๋ ๊ฒ ๋๋ ์ด์ ๋ ์ค์ฝํ์ฒด์ธ์ ์์๊ฐ ๋ก์ปฌ ๋ธ๋ญ ์ค์ฝํ๋ถํฐ ์ฐพ๊ณ ์ ์ผ ๋์ค์ ๊ธ๋ก๋ฒ ์ค์ฝํ๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ก์ปฌ ์ค์ฝํ๋ฅผ ์ฐพ์์ ์์ผ๋ฉด -> ์์ ์ค์ฝํ์์ ์ฐพ๋๋ค -> ๊ทธ๋๋ ์์ผ๋ฉด ๋ค์ ์์ ์ค์ฝํ์ ๊ฐ์ ์ฐพ๋๋ค -> ... -> Script ์ค์ฝํ์์ ์ฐพ๋๋ค -> Window ๊ฐ์ฒด๊ฐ ๊ด๋ฆฌํ๋ Global ์ค์ฝํ์์ ์ฐพ๋๋ค.์ ์์์์ Script ์ค์ฝํ ๋ํ ์ ์ผ ๋๋ถ๋ถ์์ ๊ฒ์ํ๊ธฐ ๋๋ฌธ์ ์ผ์ข ์ ๊ธ๋ก๋ฒ ์ค์ฝํ๊ฐ ๋๋ ๊ฒ์ ๋๋ค.๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.(์ฌ์ง)์ข ๋ ์์ธํ ๋ด์ฉ์ ์๋ ๊ฐ์ข๋ฅผ ๋ณด์๋ฉด ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.์ค์ฝํ ์ฒด์ธ๊ณผ ์ฐธ์กฐ ์ค๋ฅ(Scope Chaining and Reference Error)๊ทธ๋ฆฌ๊ณ ์ค์ฝํ ์ฒด์ธ๊ณผ ํ๋กํ ํ์ ์ฒด์ธ์ ํผ๋ํ์ค ์ ์์ด์ ํ๋กํ ํ์ ์ฒด์ธ ์์๋ ๊ฐ์ด ๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.ํ๋กํ ํ์ ์ฒด์ธ ๋ต๋ณ์ด ํ์ค๋์๊ฒ ๋์ ๋๋ ธ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ฐ์ฌํฉ๋๋ค ๐
- 0
- 2
- 113
Q&A
keys(), entrieS() ๊ฐ์ ํจ์์ ๋ฐํ๊ฐ์ด ์ iterator์ธ์ง ์ ์ดํด๊ฐ ์๊ฐ๋๋ค..!
ํ์ค๋ ์๋ ํ์ธ์! ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๐๋ฐฐ์ด์ keys(), values(), entires() ๋ ๋ชจ๋ array iterator ๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋์ MDN ์ ๊ณต์ ๋ฌธ์์ ์๋์ ๊ฐ์ด ์ค๋ช ๋์ด ์์ต๋๋ค. (keys() ๋ง ๋งํฌํด ๋์๊ฒ์!)The keys() method of Array instances returns a new array iterator object that contains the keys for each index in the array.์ฝ๋๋ก ์ง์ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค! ๋ฐฐ์ด์ ์ ์ํ๊ณ values() ๋ฐํ๊ฐ์ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.(์ฌ์ง)๊ทธ๋ฌ๋ฉด ์ ๊ทธ๋ฆผ์ฒ๋ผ Array Iterator ๋ฅผ ๋ฐํํ๊ณ Array Iterator ์ ํ๋กํ ํ์ ์ next ์ ๊ฐ์ iterable ํ๋กํ ์ฝ์ ์ ์ํ๊ณ ์๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ๋ฐฐ์ด์ iterable ๊ฐ์ฒด์ธ๋ฐ์ ๊ทธ ์ด์ ๋ ๋ฐ๋ก [Symbol.iterator]() ๋ฅผ ์ ์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Symbol.iterator๊ทธ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋ง์ด ์ฌ์ฉํ๋ Object ์ keys, values, entries ๋ฉ์๋๋ ๋ฐฐ์ด์ ๋ฐํํ๊ณ ๊ทธ ๋ฐฐ์ด๋ค์ด ๋ชจ๋ iterable ํ๋กํ ์ฝ์ ์ค์ํ๊ณ ์๋ ๋ฐฐ์ด ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ for ... of ์ ๊ฐ์ ์ดํฐ๋ฌ๋ธ ์ํ ๋ฃจํ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์ด ํ์ธํ ์ ์์ต๋๋ค.(์ฌ์ง)๋ต๋ณ์ด ํ์ค๋์ ๊ถ๊ธ์ฆ์ ๋์์ด ๋๊ธธ ๋ฐ๋๋๋ค. ๐ ํ์ผ์๋ ์ ๊ฐ ๋ต๋ณ์ ์กฐ๊ธ ๋ฆ๊ฒ ๋๋ฆด ์ ์๋ ์ ์ํด ๋ถํ๋๋ฆฌ๊ฒ ์ต๋๋ค ๐โโ
- 0
- 1
- 126
Q&A
var ๋ณ์์ ๋ฌธ์ ์ ์ค๋ช ํ์ค ๋ ์ง๋ฌธ ์์ต๋๋ค.
์๋ ํ์ธ์, ์ฐ์ฑ๋! ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ํจ์ ์ค์ฝํ์ ๋ธ๋ก ์ค์ฝํ์์ ๊ฐ์ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ฌ์ฉํ์ ๋, ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋์ง๋ฅผ ์ง๋ฌธํ์ ๊ฒ ๊ฐ์์. ์์ ์ฝ๋์ธ testShadowing ํจ์ ์์์ let x = 5;๋ก ๋ณ์ x๋ฅผ ์ ์ธํ๊ณ if ๋ธ๋ก ์์์ let x = 10;์ผ๋ก ๋ ๋ค์ ๋ณ์ x๋ฅผ ์ ์ธํ์ต๋๋ค.์ด๋ ๋ ๊ฐ์ x ๋ณ์๋ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋๋ต๋๋ค. function testShadowing() { let x = 5; if (true) { let x = 10; console.log(x); } console.log(x); } testShadowing() ํจ์๊ฐ ์คํ๋๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ค์ ์์๋ก ๋์ํฉ๋๋ค: ํจ์๊ฐ ํธ์ถ๋๋ฉด ์คํ ์ปจํ ์คํธ๋ผ๋ ํน๋ณํ ๊ณต๊ฐ์ด ๋ง๋ค์ด์ ธ์. ์คํ ์ปจํ ์คํธ ์์๋ ๋ณ์๋ฅผ ์ ์ฅํ ์ ์๋ ํ๊ฒฝ์ด ๋ง๋ จ๋๋๋ฐ, ์ด๊ฑธ ๋ณ์ ํ๊ฒฝ์ด๋ผ๊ณ ํฉ๋๋ค.ํจ์ ์์ ์๋ ๋ณ์๋ค์ ์ํ ๊ณต๊ฐ์ด ๋ณ์ ํ๊ฒฝ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง๋๋ฐ์ var์ let, const ์ ๋ฐ๋ผ ์ด๊ธฐ๊ฐ์ด ์กฐ๊ธ ๋ค๋ฆ ๋๋ค.์ด๋ let์ด๋ const๋ก ์ ์ธ๋ ๋ณ์๋ค์ uninitialized๋ผ๋ ์ํ๊ฐ ๋ฉ๋๋ค.๋ฐ๋ฉด์ var๋ก ์ ์ธ๋ ๋ณ์๋ค์ undefined๋ผ๋ ๊ฐ์ผ๋ก ์ด๊ธฐํ๋์ฃ ํจ์ ์ฝ๋๊ฐ ํ ์ค์ฉ ์คํ๋๋ฉด์ ๋ณ์์ ๊ฐ์ด ํ ๋น๋๊ธฐ ์์ํฉ๋๋ค.let์ด๋ const๋ก ์ ์ธ๋ ๋ณ์๋ค์ ์ ์ธ๋ฌธ์ด ์คํ๋๊ธฐ ์ ๊น์ง๋ ์ฌ์ฉํ ์ ์์ด์. ๊ทธ๋์ ์ด ๊ธฐ๊ฐ์ ์ผ์์ ์ฌ๊ฐ์ง๋(Temporal Dead Zone, TDZ)๋ผ๊ณ ํฉ๋๋ค.์ ์ธ๋ฌธ์ด ์คํ๋๋ฉด ๋น๋ก์ ๋ณ์์ ๊ฐ์ด ํ ๋น๋๊ณ , ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๊ฒ์ด์ฃ . testShadowing ์ฝ๋์ ์ ๋จ๊ณ๋ฅผ ๋์ ํด ๋ณด๋ฉด: testShadowing ํจ์๊ฐ ํธ์ถ๋๋ฉด ์คํ ์ปจํ ์คํธ๊ฐ ๋ง๋ค์ด์ง๊ณ , ๋ณ์ x๋ฅผ ์ํ ๊ณต๊ฐ์ด ๋ง๋ค์ด์ง๋๋ค.let x = 5;๊ฐ ์คํ๋๋ฉด์ ๋ณ์ x์ ๊ฐ 5๊ฐ ํ ๋น๋์ฃ if ๋ธ๋ก ์์์ let x = 10;์ด ์คํ๋๋ฉด, ์๋ก์ด ๋ธ๋ก ์ค์ฝํ๊ฐ ๋ง๋ค์ด์ง๊ณ ๊ทธ ์์ ๋ ๋ค๋ฅธ ๋ณ์ x๊ฐ ์๊ฒจ์. ์ด x๋ ๋ธ๋ก ๋ฐ๊นฅ์ ์๋ x์๋ ๋ค๋ฅธ ๋ณ์์ ๋๋ค.๋ธ๋ก ์์์ console.log(x);๊ฐ ์คํ๋๋ฉด, ๋ธ๋ก ์์ ์๋ x์ ๊ฐ์ธ 10์ด ์ถ๋ ฅ๋ฉ๋๋ค.๋ธ๋ก์ด ๋๋๋ฉด ๋ธ๋ก ์์์ ๋ง๋ค์ด์ง x๋ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ์ฆ ๋ ์ด์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ ๊ฒ์ด์ฃ .ํจ์ ๋ง์ง๋ง์ ์๋ console.log(x);๊ฐ ์คํ๋๋ฉด, ํจ์ ๋ฐ๊นฅ์ ์๋ x์ ๊ฐ์ธ 5๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. ์๋๋ testShadowing ์ ์คํํ์ ๋ ์ค์ฝํ ์ฒด์ธ์ ๋ชจ์ต๋๋ค. Block ์ค์ฝํ๋ if ๋ฌธ ๋ธ๋ญ ์ค์ฝํ๋ฅผ Local ์ค์ฝํ๋ testShadowing ํจ์ ์ค์ฝํ๋ฅผ ๋ํ๋ ๋๋ค. let ์ผ๋ก x ๋ณ์๋ฅผ ์ ์ธ ๋ฐ ํ ๋น ํ๊ธฐ ๋๋ฌธ์ ๊ฐ ์ค์ฝํ๋ง๋ค x ๋ณ์๊ฐ ์กด์ฌํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.(์ฌ์ง)์ด๋ ๊ฒ let๊ณผ const ๋ var ๋ฌ๋ฆฌ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ์ค์ฝํ์์ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๋ณ์๋ฅผ ์ฌ๋ฟ ์ ์ธํ๋๋ผ๋ ์๋ก ๋ค๋ฅธ ๋ณ์๋ก ์ทจ๊ธ๋๋ค๋ ๊ฑธ ์ ์ ์์ต๋๋ค. ์ด๋ฆ์ด ๊ฐ์์ ํ์ ์ค์ฝํ์ ๋ณ์๊ฐ ์์ ์ค์ฝํ์ ๋ณ์๋ฅผ ๊ฐ๋ฆฌ๋ ์ด๋ฐ ํ์์ ๋ณ์ ์๋์์ด๋ผ๊ณ ํฉ๋๋ค.๋ณ์ ์๋์์ด ๋ฐ์ํ๋ ์ด์ ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค ํ ๋, ์ค์ฝํ ์ฒด์ธ์ ํตํด์ ๋ณ์๋ฅผ ์ฐพ๊ฒ ๋๋๋ฐ ํ์ฌ ์คํ ์ค์ธ ์ฝ๋์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ค์ฝํ๋ถํฐ ์ฐพ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ๋ฆฌํ๋ฉด, ํจ์๊ฐ ์คํ๋ ๋ ๋ณ์๋ฅผ ์ํ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ๋ง๋ จ๋์ง๋ง, ์ค์ ๋ก ๋ณ์์ ๊ฐ์ด ํ ๋น๋๋ ๊ฑด ํด๋น ๋ณ์ ์ ์ธ๋ฌธ์ด ์คํ๋๋ ์์ ์ด์์. ํนํ let์ด๋ const๋ก ์ ์ธํ ๋ณ์๋ ์ ์ธ ์ ์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์ฃผ์ํด์ผ ํฉ๋๋ค. ์๋๋ ๊ด๋ จ ์์ ์ ๋งํฌ์ ๋๋ค. ๋๋ฒ๊ฑฐ๋ฅผ ๊ฐ์ด ์คํํ๋ฉด์ ํจ์ ์คํ ์ปจํ ์คํธ ๋ฐ ์ค์ฝํ ์ฒด์ธ์ ์ค๋ช ํ๊ณ ์์ด์. ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. - ํจ์ ์คํ ์ปจํ ์คํธ 2ํธ - ๋ค์ ๋ณด๋ ํจ์ ์ค์ฝํ์ ๋ธ๋ก ์ค์ฝํ- https://www.inflearn.com/course/lecture?courseSlug=%EC%A7%84%EC%A7%9C-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EA%B3%A0%EA%B8%89%EA%B9%8C%EC%A7%80&unitId=176250- ์ค์ฝํ ์ฒด์ธ๊ณผ ์ฐธ์กฐ ์ค๋ฅ- https://www.inflearn.com/course/lecture?courseSlug=%EC%A7%84%EC%A7%9C-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EA%B3%A0%EA%B8%89%EA%B9%8C%EC%A7%80&unitId=177158
- 0
- 2
- 437