์๋
ํ์ธ์. ์ ํ๋ธ์์ ์ฆ๊ฑฐ์ด ์ฝ๋ฉ ๊ฒฝํ - ์ฝ๋ฉ๋งฅ์ค(CodingMax) ์ฑ๋์ ์ด์ํ๊ณ ์๋ ์ฝ๋ฉ๋งฅ์ค์
๋๋ค. yfeelib(์ฐํ๋ฆฝ) ์์๋ ๋ค์ํ ๋ด์ฉ์ ์ด์ผ๊ธฐ๋ก ํ์ด ๋ณด๊ณ ์์ต๋๋ค.
์ถ์ ์ด์ ๊ฐ๋ฉด์ ์๋ก์ด ์ง์์ ๋ฐฐ์ฐ๊ณ ๋๋๋ ๊ฒ์ ์ข์ ํฉ๋๋ค. ๐
๐บ https://www.youtube.com/@coding-max
๐ https://www.codingmax.net
ํญ์ ์ ์ตํ๊ณ ์์ฐฌ ๋ด์ฉ์ผ๋ก ์ฐพ์ ๋ต๊ฒ์!
Courses
Reviews
jjhgwx
ยท
# React Compiler Official Documentation Complete Guide --- This appears to be a title for a comprehensive guide about the React Compiler based on its official documentation. The React Compiler is a tool that automatically optimizes React applications by memoizing components and values, reducing the need for manual optimization with hooks like `useMemo`, `useCallback`, and `memo`. If you'd like me to help translate specific content from the React Compiler documentation or create a guide about it, please share the Korean text you'd like translated, and I'll provide an accurate English translation following the guidelines above.# React Compiler Official Documentation Complete Guide --- This appears to be a title for a comprehensive guide about the React Compiler based on its official documentation. The React Compiler is a tool that automatically optimizes React applications by memoizing components and values, reducing the need for manual optimization with hooks like `useMemo`, `useCallback`, and `memo`. If you'd like me to help translate specific content from the React Compiler documentation or create a guide about it, please share the Korean text you'd like translated, and I'll provide an accurate English translation following the guidelines above.- 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
Enable Linting ํญ๋ชฉ์ ์ฐพ์์๊ฐ ์์ต๋๋ค.
brain_exit ๋ ๋ถํธ ๋๋ ค ์ฃ์กํฉ๋๋ค. ์ฝ๋์๋๋ฐ์ค ์ ๋ฐ์ดํธ ๋ฐ ์ฝ๋ฉ ํ๊ฒฝ ์ถ์ ๋ฑ์ ์ด์๊ฐ ์์ด์ ๋ก์นผํ๊ฒฝ์์ ๊ฐ์๋ฅผ ์๊ฐํด ์ฃผ์๊ธธ ๋ถํ๋๋ฆฝ๋๋ค ๐โโ์ฝ๋์๋๋ฐ์ค ๊ฐ์ ์ดํ์ ๋ฐ๋ก ๋ก์ปฌ์์ ํ๊ฒฝ ์ค์ ํ๋ ๊ฐ์๊ฐ ์์ต๋๋ค ๋ถํธ ๋๋ ค ์ ๋ง ์ฃ์กํฉ๋๋ค ๐โโ(๊ฐ์ ์์๋ ์ ๋ ์ ๋ณ๊ฒฝ ์์ )
- Likes
- 0
- Comments
- 2
- Viewcount
- 46
Q&A
์ ์๋ ๊ฐ์ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํด๋๋๋์?
๋ต! ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ์ ๋ ๋ฉ๋๋ค! ๐
- Likes
- 0
- Comments
- 1
- Viewcount
- 77
Q&A
V8์์ undefined๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง๋ฌธ์ ๋๋ค
์๋ ํ์ธ์! ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ต๋ณ์ ์์์ผ๋ก ๋๋ฆฌ๋๊ฒ ์ข์ ๊ฒ ๊ฐ์์, ์๋ ์์์ ์ฌ๋ ธ์ต๋๋ค. https://inf.run/pPajv์ฐธ๊ณ ๋ก ์ง์ง! ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ๋ฌธ ๊ฐ์์ฌ์ ์ฝ๊ฐ overview ๋ก v8 ์ ์ค๋ช ํ ์ ์ํด ๋ถํ๋๋ฆฝ๋๋ค ๐
- Likes
- 0
- Comments
- 2
- Viewcount
- 92
Q&A
์ฝ๋ ์๋๋ฐ์ค ์์ค ์ ๋ ฅ์ ์ฝ์์ด ๊ณ์ ๋ฐ์ํ๋๊ฒ ๊ฐ์์.
ymckh1005๋ ์ ๋ ์ ๊ท ํ๋ก์ ํธ ์์ฑ ํ ์ฌํ์ ์ฑ๊ณตํ์ฌ ํด๋น ๋ด์ฉ์ ๋๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ๋ณด์์ต๋๋ค.์๋ ์ด๋ฏธ์ง์์ ๋นจ๊ฐ์ ์ฌ๊ฐํ์ผ๋ก ํ์ํ ๋ฒํผ๊ณผ ๋ฉ๋ด๋ฅผ ํด๋ฆญํด์ Settings ๋ก ์ง์ ํฉ๋๋ค. (์ฌ์ง) search settings ์ ๋ ฅ๋์ preview ๋ผ๊ณ ์ ๋ ฅํฉ๋๋ค.(์ฌ์ง) ๊ทธ๋ฌ๋ฉด ์ค์ ์ค์ Sandbox: Preview Run Action ์ด ์๋๋ฐ์(์ฌ์ง) ๊ธฐ๋ณธ๊ฐ์ด edit-delayed ๋ฅผ Save ๋ก ๋ณ๊ฒฝํฉ๋๋ค.(์ฌ์ง) ์ด๋ ๊ฒ ์ค์ ํ๊ณ Settings ๋ฅผ ๋ซ๊ณ ํธ์งํด ๋ณด์๋ฉด, Preview ๊ฐ ์ ๋ฐ์ดํธ ๋์ง ์๊ณ ์ ์ฅํ ๋๋ง ์ ๋ฐ์ดํธ ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์์ฒ๋ผ ํ๋๋ฐ ๋์ํ์ง ์๋๋ค๋ฉด, ํ๋ฉด์ ๋ฆฌํ๋ ์ ํ๊ฑฐ๋ ํ๋ก์ ํธ๋ฅผ ๋ซ์๋ค๊ฐ ๋ค์ ์ด์ด๋ณด๋ฉด ์ค์ ๋๋ก ๋์ํ ๊ฒ์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค ๐โโ
- Likes
- 0
- Comments
- 3
- Viewcount
- 204
Q&A
์ฝ๋ ์๋๋ฐ์ค ์์ค ์ ๋ ฅ์ ์ฝ์์ด ๊ณ์ ๋ฐ์ํ๋๊ฒ ๊ฐ์์.
์๋ ํ์ธ์ ymckh1005๋, ์ธํ๋ฐ AI ์ธํด์ ๋ต๋ณ์ AI ๊ฐ ์์ฑํ์ฌ ์ ํํ์ง ์์ ๋๊ฐ ์์ต๋๋ค. ์ฐ์ ๋ถํธ์ ๋๋ ค ์ฃ์กํฉ๋๋ค.์ ๊ฐ MacOS ํ๊ฒฝ์ ํฌ๋กฌ์์ ์ฝ๋ ์๋๋ฐ์ค๋ฅผ ์คํํ๋ฉด, ์ฝ๋๋ฅผ ์์ฑํ ๋๋ console.log๊ฐ ๋ฐ์ํ์ง ์๊ณ Cmd+S ๋ฅผ ๋๋ ์ ๋์๋ง ์๋ํ์ต๋๋ค. ymckh1005๋์ด ๊ฒช์ผ์ ๋ถํธ์ ์ ๊ฐ ์ฌํํ์ง ๋ชปํ ์ด์ ๊ฐ ์ฝ๋์๋๋ฐ์ค ์ ๋ฐ์ดํธ๊ฐ ์ฆ์์ ์๊ธด ๋ฒ๊ทธ ์ผ ์ ์์ต๋๋ค. ์ฒ์ ๋ฌธ์ ์ฃผ์ ๊ฒ์ฒ๋ผ ๋ก์ปฌ์ ์์ ํ๊ฒฝ์ ๋ง๋ค๊ณ VSCode ๋ก ์์ ์ ์งํํ์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. ๊ด๋ จํ์ฌ ์๋ ์์๋ค์ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ๐โโ๋ก์ปฌ ์์ ํ๊ฒฝ์ ์ํ nodejs ์ค์นํ๊ธฐ nvm ์ผ๋ก nodejs ์ค์นํ๊ธฐ Parcel๋ก ๋ก์ปฌ ์์ ํ๊ฒฝ ๋ง๋ค๊ธฐVite๋ก ๋ก์ปฌ ์์ ํ๊ฒฝ ๋ง๋ค๊ธฐ
- Likes
- 0
- Comments
- 3
- Viewcount
- 204
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]ํผ๋์ ๋๋ฆฐ ์ ์ฃ์กํฉ๋๋ค. ๊ด๋ จ ์ ์ ๋ด์ฉ์ ์์ ๋ ธํธ๋ก ์ถ๊ฐํ์์ต๋๋ค.๊ฐ์ฌํฉ๋๋ค.
- Likes
- 0
- Comments
- 2
- Viewcount
- 195
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๊ฐ์ฌํฉ๋๋ค.
- Likes
- 0
- Comments
- 2
- Viewcount
- 479
Q&A
console ์ด ์๋ณด์ ๋๋ค.
์๋ ํ์ธ์. ttyykim ๋ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.์ฝ๋๋ฐ์ค๊ฐ ์์ฃผ ์ ๋ฐ์ดํธ ๋์ด UI ๊ตฌ์ฑ์ด ๊ฐ์์ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ฐ์ ์ฝ์์ ์๋ ์์๋ก ํ์ธํ์ค ์ ์์ต๋๋ค.(์ฌ์ง) ์์ ์ ์ฝ๋์๋ ๋ฐ์ค๋ก ์งํํ๊ณ ์์ง๋ง ๋ก์ปฌ์ ์์ ํ๊ฒฝ์ ๋ง๋ค๊ณ ๊ฐ์๋ฅผ ์๊ฐํ์ ๋ ๊ด์ฐฎ์ต๋๋ค.์น์ 3์์ ๋ก์ปฌ ํ๊ฒฝ์์ ์๊ฐ ํ๊ฒฝ ๋ง๋ค๊ธฐ ๋ด์ฉ์ด ์์ผ๋ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.๊ฐ์ฌํฉ๋๋ค.
- Likes
- 0
- Comments
- 2
- Viewcount
- 167
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๋ต๋ณ์ด ๋์ ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- Likes
- 0
- Comments
- 2
- Viewcount
- 224
Q&A
for ๋ฌธ์์ var ํค์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋์ let ํค์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋ ์ฐจ์ด์
์๋ ํ์ธ์ Droid ๋! ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค ๐ ํด๋น ๋ด์ฉ์ ํ์ฌ ์๊ฐํ๊ณ ๊ณ์ ๊ฐ์ข ์ค ์๋ ๊ฐ์ข์์ ์์ธํ ๋ด์ฉ์ ์ค๋ช ํ๊ณ ์์ต๋๋ค. ๋ณ์ ์ค์ฝํ(ํจ์ ์ค์ฝํ์ ๋ธ๋ก ์ค์ฝํ) ๊ทธ๋ฆฌ๊ณ VAR ๋ณ์์ ๋ฌธ์ ์ 1ํธ ๐๊ฐ์ข์ 10๋ถ์ ๋ ์์น์ for ๋ฌธ์ let ๋ณ์๊ฐ ์ด๋ป๊ฒ ๋ฐ์ธ๋ฉ์ด ๋๋์ง ๊ทธ๋ฆฌ๊ณ setTimeout ์ ์ฝ๋ฐฑํจ์์ ์ด๋ป๊ฒ ์บก์ณ๋ง์ด ๋๋์ง ์ค๋ช ์ ํ๊ณ ์์ต๋๋ค.ํจ์ ์คํ ์ปจํ ์คํธ 2ํธ - ๋ค์ ๋ณด๋ ํจ์ ์ค์ฝํ์ ๋ธ๋ก ์ค์ฝํ๐ ํจ์ ์คํ ์ปจํ ์คํธ๋ฅผ ๋ค๋ฃจ๋ฉฐ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ข ๋ ์์ธํ๊ฒ ์ค๋ช ํ๊ณ ์์ต๋๋ค. ์ค์ฝํ ์ฒด์ด๋(Scope Chaining)์ ์ธ์ ์คํ๋ ๊น? ์ ๊ด๋ จ๋ ์ค์ํ ๋ฌธ์ ์ ํด๊ฒฐ๋ฒ๐์ถ๊ฐ๋ก ์ด ๊ฐ์๋ ๊ฐ์ด ๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค ๊ฐ์ฌํฉ๋๋ค ๐
- Likes
- 0
- Comments
- 1
- Viewcount
- 162






