λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’» ν”„λ‘ νŠΈμ—”λ“œ/πŸ“š JS7

[JS]λ³‘λ ¬μ μœΌλ‘œ 비동기 μ²˜λ¦¬ν•˜κΈ° 비동기λ₯Ό λ³‘λ ¬μ μœΌλ‘œ μˆ˜ν–‰ν•˜λŠ” κ²ƒμ—λŠ” 크게 3가지 방법이 μžˆμŠ΅λ‹ˆλ‹€. 1. Promise.all 순회 κ°€λŠ₯ν•œ 객체에 주어진 λͺ¨λ“  ν”„λ‘œλ―ΈμŠ€κ°€ μ΄ν–‰ν•œ ν›„, ν˜Ήμ€ ν”„λ‘œλ―ΈμŠ€κ°€ 주어지지 μ•Šμ•˜μ„ λ•Œ μ΄ν–‰ν•˜λŠ” Promiseλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 주어진 ν”„λ‘œλ―ΈμŠ€ 쀑 ν•˜λ‚˜κ°€ κ±°λΆ€ν•˜λŠ” 경우, 첫 번째둜 κ±°μ ˆν•œ ν”„λ‘œλ―ΈμŠ€μ˜ 이유λ₯Ό μ‚¬μš©ν•΄ μžμ‹ λ„ κ±°λΆ€ν•©λ‹ˆλ‹€. μž…λ ₯ κ°’μœΌλ‘œ λ“€μ–΄μ˜¨ ν”„λ‘œλ―ΈμŠ€ 쀑 ν•˜λ‚˜λΌλ„ κ±°λΆ€ λ‹Ήν•˜λ©΄ Promise.all()은 μ¦‰μ‹œ κ±°λΆ€ν•©λ‹ˆλ‹€. const promise1 = Promise.resolve(3); const promise2 = 42; const promise3 = new Promise((resolve, reject) => { setTimeout(resolve, 100, 'foo'); }); Promise.all([.. 2024. 4. 19.
[μžλ°”μŠ€ν¬λ¦½νŠΈ] 비동기 μ²˜λ¦¬μ™€ μ΄λ²€νŠΈλ£¨ν”„ 비동기 ν”„λ‘œκ·Έλž˜λ° vs 동기 ν”„λ‘œκ·Έλž˜λ° 무슨 차이일까? 동기 처리 : ν˜„μž¬ μ‹€ν–‰ 쀑인 νƒœμŠ€ν¬κ°€ μ’…λ£Œν•  λ•ŒκΉŒμ§€ λ‹€μŒ νƒœμŠ€ν¬κ°€ λŒ€κΈ°ν•˜λŠ” 방식 -> μ‹€ν–‰ μˆœμ„œκ°€ 보μž₯λ˜μ§€λ§Œ μ‹€ν–‰ 쀑인 νƒœμŠ€ν¬κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ 이후 νƒœμŠ€ν¬λ“€μ€ λΈ”λ‘œν‚Ή λ©λ‹ˆλ‹€. 비동기 처리 : ν˜„μž¬ μ‹€ν–‰ 쀑인 νƒœμŠ€ν¬κ°€ μ’…λ£Œλ˜μ§€ μ•Šλ”λΌλ„ λ‹€μŒ νƒœμŠ€ν¬λ₯Ό μ‹€ν–‰ν•˜λŠ” 방식 -> λΈ”λ‘œν‚Ήμ΄ λ°œμƒν•˜μ§€ μ•Šμ§€λ§Œ μ‹€ν–‰ μˆœμ„œλŠ” 보μž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ 비동기 μ½”λ“œ μ˜ˆμ‹œ function a(){ console.log('a'); } function b(){ setTimeout(a, 300); console.log('b'); } b(); //μ‹€ν–‰κ²°κ³Ό //'b' //'a' μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ 비동기 처리λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ aν•¨μˆ˜κ°€ μ‹€ν–‰λœ 후에 bν•¨μˆ˜κ°€ μ‹€ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 이.. 2023. 12. 27.
[μžλ°”μŠ€ν¬λ¦½νŠΈ] ν΄λ‘œμ € ν΄λ‘œμ €λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•œ κ°œλ… λ ‰μ‹œμ»¬ ν™˜κ²½ ν•΄λ‹Ή κ°œλ…μ„ λͺ¨λ₯΄μ‹ λ‹€λ©΄ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ ν¬μŠ€νŒ…μ„ λ¨Όμ € μ½λŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν΄λ‘œμ € μ™ΈλΆ€ ν•¨μˆ˜λ³΄λ‹€ 였래 μœ μ§€λ˜μ–΄ 생λͺ… μ£ΌκΈ°κ°€ λλ‚œ μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλŠ” 쀑첩 ν•¨μˆ˜ 예제 function coffeeMachine() { let coffeeBeans = 10; const makeCoffee = () => { if (coffeeBeans { console.log(`ν˜„μž¬ 남아 μžˆλŠ” μ›λ‘λŠ” ${coffeeBeans}g μž…λ‹ˆλ‹€.`); }; .. 2023. 12. 27.
[μžλ°”μŠ€ν¬λ¦½νŠΈ] μ‹€ν–‰μ»¨ν…μŠ€νŠΈ πŸ“Œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(Execution Context) μ‹λ³„μžμ™€ μŠ€μ½”ν”„, μ½”λ“œ μ‹€ν–‰ μˆœμ„œλ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ κ΅¬ν˜„ν•œ λ‚΄λΆ€ λ©”μ»€λ‹ˆμ¦˜ μ‹λ³„μžμ™€ μŠ€μ½”ν”„λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μœΌλ‘œ κ΄€λ¦¬ν•˜κ³ , μ½”λ“œ μ‹€ν–‰ μˆœμ„œλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μŠ€νƒ 자료ꡬ쑰둜 κ΄€λ¦¬λ©λ‹ˆλ‹€. μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©΄ ν•΄λ‹Ή μ½”λ“œμ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λ˜μ–΄ μŠ€νƒμ— push되고, 싀행이 μ’…λ£Œλ˜λ©΄ pop λ©λ‹ˆλ‹€. λ ‰μ‹œμ»¬ ν™˜κ²½ μ‹λ³„μžμ™€ μŠ€μ½”ν”„λ₯Ό κ΄€λ¦¬ν•˜λŠ” μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€. ν™˜κ²½λ ˆμ½”λ“œμ™€ μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ 참쑰둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ν™˜κ²½λ ˆμ½”λ“œ μŠ€μ½”ν”„μ— λŒ€ν•œ μ‹λ³„μžμ™€ λ°”μΈλ”©λœ 값을 κ΄€λ¦¬ν•©λ‹ˆλ‹€. μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘° μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€ μŠ€μ½”ν”„ 체인 = μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό 톡해 단방ν–₯ λ§ν¬λ“œ.. 2023. 12. 27.
[μžλ°”μŠ€ν¬λ¦½νŠΈ] μŠ€μ½”ν”„ πŸ“Œ μŠ€μ½”ν”„(Scope) : λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” λ²”μœ„ = (μ‹λ³„μžλ₯Ό μ°Ύμ•„λ‚΄κΈ° μœ„ν•œ κ·œμΉ™) μŠ€μ½”ν”„λŠ” μ „μ—­ μŠ€μ½”ν”„μ™€ 지역 μŠ€μ½”ν”„λ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€. λ³€μˆ˜λŠ” μ„ μ–Έ μœ„μΉ˜μ— μ˜ν•΄ μŠ€μ½”ν”„λ₯Ό κ°–κ²Œ λ©λ‹ˆλ‹€. μ „μ—­ μŠ€μ½”ν”„λ₯Ό κ°–λŠ” μ „μ—­ λ³€μˆ˜λŠ” μ „μ—­μ—μ„œ μ°Έμ‘° κ°€λŠ₯ν•˜κ³ , 지역 μŠ€μ½”ν”„λ₯Ό κ°–λŠ” 지역 λ³€μˆ˜λŠ” μ„ μ–Έλœ 지역과 ν•˜λΆ€ μ§€μ—­μ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  λ•Œ, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μŠ€μ½”ν”„ 체인을 톡해 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” μ½”λ“œμ˜ μŠ€μ½”ν”„μ—μ„œ μ‹œμž‘ν•΄μ„œ μƒμœ„ μŠ€μ½”ν”„ λ°©ν–₯으둜 μ΄λ™ν•˜λ©° μ„ μ–Έλœ λ³€μˆ˜λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€. μŠ€μ½”ν”„ 체인 μ „μ—­ 객체와 μ€‘μ²©λœ ν•¨μˆ˜μ˜ μŠ€μ½”ν”„ 레퍼런슀λ₯Ό μ°¨λ‘€λ‘œ μ €μž₯ν•˜κ³ , μŠ€μ½”ν”„κ°€ μ–΄λ–»κ²Œ μ—°κ²° 되고 μžˆλŠ”μ§€ λ³΄μ—¬μ£ΌλŠ” 것을 λ§ν•©λ‹ˆλ‹€. μ‹λ³„μžμ™€ μŠ€μ½”ν”„λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€. λ ‰μ‹œμ»¬ ν™˜κ²½μ€ 식별.. 2023. 12. 27.
[μžλ°”μŠ€ν¬λ¦½νŠΈ] This πŸ“Œ This μžμ‹ μ΄ μ†ν•œ 객체 λ˜λŠ” μžμ‹ μ΄ 생성할 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” 자기 μ°Έμ‘° λ³€μˆ˜ thisλ₯Ό 톡해 μžμ‹ μ΄ μ†ν•œ 객체 λ˜λŠ” μžμ‹ μ΄ 생성할 μΈμŠ€ν„΄μŠ€μ˜ ν”„λ‘œνΌν‹°λ‚˜ λ©”μ„œλ“œλ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. this 바인딩은 ν•¨μˆ˜ 호좜 방식에 μ˜ν•΄ λ™μ μœΌλ‘œ κ²°μ •λ©λ‹ˆλ‹€. ν•¨μˆ˜ 호좜 방식 1. 일반 ν•¨μˆ˜ 2. λ©”μ„œλ“œ 호좜 3. μƒμ„±μž ν•¨μˆ˜ 호좜 4. Function.prototype.apply/call/bind λ©”μ„œλ“œμ— μ˜ν•œ κ°„μ ‘ 호좜 5. ES6, ν™”μ‚΄ν‘œ ν•¨μˆ˜ 호좜 1. 일반 ν•¨μˆ˜ μΌλ°˜ν•¨μˆ˜ 호좜 thisλŠ” μ „μ—­ 객체인 windowλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€. -> 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ” 일반 ν•¨μˆ˜μ—μ„œλŠ” this의 μ‚¬μš©μ€ μ˜λ―Έκ°€ μ—†μŠ΅λ‹ˆλ‹€ function normal(){ console.log(this); //Window } normal().. 2023. 12. 27.