Skip to content

Latest commit

Β 

History

History
120 lines (60 loc) Β· 7.3 KB

01_JSBasics.md

File metadata and controls

120 lines (60 loc) Β· 7.3 KB

JavaScript

JS의 μ›μ‹œνƒ€μž…μ„ λ§ν•΄λ³΄μ„Έμš”.

  • boolean, number, string, symbol, undefined, null 둜 7가지가 μžˆμŠ΅λ‹ˆλ‹€.

Undefined 와 Null 의 차이λ₯Ό μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • undefined λŠ” μ„ μ–Έ ν›„ μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ λ³€μˆ˜μ˜ 값이고, null 은 κ°œλ°œμžκ°€ λ³€μˆ˜μ— 값이 μ—†λ‹€λŠ” 것을 λͺ…μ‹œν•˜κΈ° μœ„ν•΄ μ˜λ„μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” κ°’μž…λ‹ˆλ‹€.

JSμ—μ„œ call-by-value 와 call-by-reference λ₯Ό 데이터 νƒ€μž…μœΌλ‘œ μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • λͺ¨λ“  μ›μ‹œνƒ€μž…μ€ immutable ν•˜κΈ° λ•Œλ¬Έμ— 변경이 λΆˆκ°€λŠ₯ν•˜λ―€λ‘œ 값이 전달될 λ•Œ λ³΅μ‚¬ν•˜μ—¬ μ „λ‹¬ν•˜λŠ” call-by-value λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ›μ‹œνƒ€μž…μ„ μ œμ™Έν•œ λͺ¨λ“  λ°μ΄ν„°λ“€μ˜ νƒ€μž…μΈ κ°μ²΄νƒ€μž…μ€ call-by-reference 둜 μ „λ‹¬λ˜λ©° κ°’μ˜ 변경이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

let, const, var 의 차이λ₯Ό μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • let 으둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” 값을 μž¬ν• λ‹Ήν•  수 μžˆμ§€λ§Œ const 둜 μ„ μ–Έλœ λ³€μˆ˜λ₯Ό 값을 μž¬ν• λ‹Ήν•  수 μ—†μŠ΅λ‹ˆλ‹€. var λ˜ν•œ λ³€μˆ˜λ₯Ό μž¬ν• λ‹Ή ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μœ νš¨λ²”μœ„μ— λŒ€ν•œ 차이도 μžˆμŠ΅λ‹ˆλ‹€. varλŠ” ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μ§€μ—­λ³€μˆ˜λ‘œ μ·¨κΈ‰λ˜κ³  λ‚˜λ¨Έμ§€ μŠ€μ½”ν”„μ—μ„œλŠ” λͺ¨λ‘ μ „μ—­λ³€μˆ˜λ‘œ μ·¨κΈ‰λ©λ‹ˆλ‹€. letκ³Ό constλŠ” 블둝 λ‚΄μ—μ„œλ§Œ μ‚¬μš©κ°€λŠ₯ν•œ μ§€μ—­λ³€μˆ˜λ‘œ μ·¨κΈ‰λ©λ‹ˆλ‹€.

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ 생성과정을 μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ‹€ν–‰ν•  μ½”λ“œμ— λŒ€ν•œ 정보λ₯Ό λͺ¨μ•„λ‘” κ°μ²΄μž…λ‹ˆλ‹€.
  • λ¨Όμ € μƒˆλ‘œμš΄ ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λ©΄ μ‹€ν–‰μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λ˜κ³  ν™œμ„± 객체가 μƒμ„±λ©λ‹ˆλ‹€.
  • ν™œμ„±κ°μ²΄κ°€ 생성 되면 arguments μœ μ‚¬λ°°μ—΄κ°μ²΄λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. ν•¨μˆ˜μ˜ μΈμžκ°€ λ˜λŠ” λ³€μˆ˜λ“€μ΄ 이곳에 μ €μž₯λ©λ‹ˆλ‹€.
  • λ‹€μŒμ€ μŠ€μ½”ν”„ 정보λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μŠ€μ½”ν”„ μ •λ³΄λŠ” ν˜„μž¬ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ 유효 λ²”μœ„λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μŠ€μ½”ν”„ 정보λ₯Ό μ™„μ„±ν•˜λ©΄ λ³€μˆ˜λ₯Ό μƒμ„±ν•˜κ³  값을 μ΄ˆκΈ°ν™” ν•©λ‹ˆλ‹€. μ΄λ•Œ μ΄ˆκΈ°ν™” λ˜μ§€ μ•Šμ€ 값은 undefined 둜 μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.
  • λ§ˆμ§€λ§‰μœΌλ‘œ this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” λ³€μˆ˜μ˜ 값듀을 ν• λ‹Ήν•©λ‹ˆλ‹€.

μŠ€μ½”ν”„ 체이닝에 λŒ€ν•΄μ„œ μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • μŠ€μ½”ν”„ 체이닝은 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ—μ„œ ν˜„μž¬ ν™œμ„± 객체가 μžμ‹ μ΄ 가지고 μžˆμ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό λ‹€λ₯Έ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ ν™œμ„± 객체λ₯Ό μ°Έμ‘°ν•˜μ—¬ μ ‘κ·Όν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
  • μƒˆλ‘œμš΄ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ λ§Œλ“€μ–΄μ§ˆ λ•Œλ§ˆλ‹€ μƒμ„±λ˜λŠ” ν™œμ„± κ°μ²΄λŠ” μžμ‹ μ΄ λ§Œλ“€μ–΄μ§€κΈ° μ „ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ μŠ€μ½”ν”„ 체인을 λ³΅μ‚¬ν•˜κ³  κ°€μž₯ μ•žμ˜ μžμ‹ μ˜ ν™œμ„± 객체λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
  • λ³€μˆ˜κ°€ 참쑰될 λ•Œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ λ‚΄μ˜ ν™œμ„± 객체의 μŠ€μ½”ν”„ 체인을 ν™•μΈν•˜κ³  μ•žμ—μ„œλΆ€ν„° μ „μ—­κ°μ²΄κΉŒμ§€ ν•΄λ‹Ή λ³€μˆ˜κ°€ μ‘΄μž¬ν•˜λŠ”μ§€ μ°¨λ‘€λŒ€λ‘œ ν™•μΈν•©λ‹ˆλ‹€.

ν”„λ‘œν† νƒ€μž…κ³Ό ν”„λ‘œν† νƒ€μž… 체이닝이 무엇인지 μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • ν”„λ‘œν† νƒ€μž…μ€ Prototype Link 와 Prototype Object 둜 κ΅¬λΆ„λ©λ‹ˆλ‹€.
  • Prototype ObjectλŠ” 객체(ν•¨μˆ˜)κ°€ μ •μ˜λ  λ•Œ ν•¨κ»˜ μƒμ„±λ˜λŠ” μ›ν˜• 객체둜 μƒμ„±μžλ₯Ό κ°€μ§‘λ‹ˆλ‹€. λ‚΄λΆ€μ—λŠ” constructor 와 __proto__ 속성이 μ‘΄μž¬ν•˜κ³  __proto__ 속성이 κΈ°μ‘΄ 객체λ₯Ό κ°€λ¦¬ν‚€κ²Œ λ©λ‹ˆλ‹€. 즉, μžμ‹ μ„ μƒμ„±ν•œ 쑰상 객체λ₯Ό κ°€λ₯΄ν‚΅λ‹ˆλ‹€.
  • __proto__ μ†μ„±μœΌλ‘œ μžμ‹ μ˜ 쑰상이 λ˜λŠ” 객체λ₯Ό κ°€λ₯΄ν‚΅λ‹ˆλ‹€. λ§Œμ•½ μ–΄λ–€ 객체가 μžμ‹ μ΄ 가지고 μžˆμ§€ μ•Šμ€ 속성을 μš”κ΅¬λ°›μœΌλ©΄ __proto__ 속성을 타고 μ—°κ²°λœ μƒμœ„ 객체둜 μ ‘κ·Όν•˜μ—¬ 값이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. 이것을 ν”„λ‘œν† νƒ€μž… 체이닝이라고 ν•©λ‹ˆλ‹€.

μ—¬λŸ¬ λ°©μ‹μ˜ this 바인딩을 μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ this λŠ” λ©”μ„œλ“œ 호좜과, ν•¨μˆ˜ ν˜ΈμΆœμ—μ„œ λ‹€λ₯Έ λ™μž‘μ„ μ·¨ν•©λ‹ˆλ‹€.
  • λ©”μ„œλ“œ ν˜ΈμΆœμ— μ‚¬μš©λ˜λŠ” this λŠ” ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ 객체에 λ°”μΈλ”©λ©λ‹ˆλ‹€.
  • ν•¨μˆ˜ ν˜ΈμΆœμ— μ‚¬μš©λ˜λŠ” this λŠ” ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό 전역객체인 window에 λ°”μΈλ”©ν•©λ‹ˆλ‹€.
  • new ν‚€μ›Œλ“œλ‘œ μƒμ„±μž ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ this λŠ” λ§Œλ“€μ–΄μ§„ 객체 μžκΈ°μžμ‹ μ„ λ°”μΈλ”©ν•©λ‹ˆλ‹€.

정적 μŠ€μ½”ν”„μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • Lexical ScopeλŠ” ν•¨μˆ˜λ₯Ό μ„ μ–Έν–ˆμ„ λ•Œ μŠ€μ½”ν”„κ°€ μƒμ„±λ˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 정적 μŠ€μ½”ν”„κ°€ 있기 떄문에 ν΄λ‘œμ €μ™€ ν˜Έμ΄μŠ€νŒ…μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

ν΄λ‘œμ €μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • ν΄λ‘œμ €λŠ” ν•¨μˆ˜κ°€ μžμ‹ μ˜ 블둝 λ‚΄λΆ€κ°€ μ•„λ‹Œ μ™ΈλΆ€ μŠ€μ½”ν”„μ— μ„ μ–Έλœ λ³€μˆ˜μ— μ ‘κ·Όν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
function makeFunc() {
  var name = "Mozilla";
  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();
myFunc();

example from MDN

  • μœ„ μ˜ˆμ‹œμ—μ„œ displayName을 λ°˜ν™˜ν•˜κ³  이후에 ν˜ΈμΆœν•  λ•Œ, displayName은 lexicalν•œ 정보λ₯Ό 가지고 있기 λ•Œλ¬Έμ— μžμ‹ μ˜ 내뢀에 μžˆλŠ” name 에 λŒ€ν•œ 값이 μ‘΄μž¬ν•˜μ§€ μ•Šμ•„λ„ μƒμœ„ ν•¨μˆ˜μ— 있던 "Mozilla" λΌλŠ” 값을 μ‚¬μš©ν•©λ‹ˆλ‹€.

ν˜Έμ΄μŠ€νŒ…μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • ν˜Έμ΄μŠ€νŒ…μ€ λͺ¨λ“  λ³€μˆ˜ 선언을 μ΅œμƒλ‹¨μœΌλ‘œ λŒμ–΄μ˜¬λ¦¬λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. μ „μ—­ λ²”μœ„μ— 있던 λ³€μˆ˜λŠ” 슀크립트 μ΅œμƒλ‹¨μœΌλ‘œ μ˜¬λΌκ°€κ³ , ν•¨μˆ˜ λ²”μœ„μ— 있던 λ³€μˆ˜λŠ” ν•¨μˆ˜ λ‚΄μ˜ μ΅œμƒλ‹¨ μœ„μΉ˜λ‘œ μ˜¬λ €μ§‘λ‹ˆλ‹€. μ΄λ•Œ μ΄ˆκΈ°ν™” 값은 ν˜Έμ΄μŠ€νŒ…λ˜μ§€ μ•Šκ³  μ„ μ–Έλ§Œ ν˜Έμ΄μŠ€νŒ…λ©λ‹ˆλ‹€.

이벀트 μœ„μž„, 이벀트 버블링, 이벀트 캑쳐링에 λŒ€ν•΄μ„œ μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • 이벀트 μœ„μž„μ€ μ–΄λ–€ νƒœκ·Έμ˜ μƒμœ„ νƒœν¬μ— 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό λ“±λ‘ν•˜μ—¬ ν•˜μœ„ νƒœκ·Έλ“€μ˜ 이벀트λ₯Ό μ²˜λ¦¬ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ ul li νƒœκ·Έλ‘œ 이루어진 λͺ©λ‘μ΄ μžˆμ„ λ•Œ, 각 li νƒœκ·Έμ— λŒ€ν•΄ λͺ¨λ‘ 클릭이벀트λ₯Ό μ²˜λ¦¬ν•˜κ³  μ‹Άλ‹€λ©΄ ul νƒœν¬μ— 이벀트 μœ„μž„μ„ ν•˜λ©΄ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό ν•œ 번만 λ“±λ‘ν•˜λŠ” κ²ƒμœΌλ‘œ 이벀트λ₯Ό μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이벀트 버블링은 μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ, μ΅œμƒμœ„ νƒœκ·Έλ‘œ μ΄λ²€νŠΈκ°€ μ „λ‹¬λ˜λŠ” νŠΉμ„±μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • 이벀트 캑쳐링은 이벀트 버블링과 λ°˜λŒ€λ‘œ μ΅œμƒμœ„ νƒœν¬μ—μ„œ ν•˜μœ„ νƒœκ·ΈκΉŒμ§€ 이벀트λ₯Ό 순차적으둜 μ „λ‹¬ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. addEventListner()의 μ„Έλ²ˆμ§Έ 인자λ₯Ό true둜 μ§€μ •ν•˜λŠ” κ²ƒμœΌλ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Throttle κ³Ό Debounce λ₯Ό μ„€λͺ…ν•΄λ³΄μ„Έμš”. μ™œ μ‚¬μš©ν• κΉŒμš”?

  • Throttle은 μ–΄λ–€ ν•¨μˆ˜κ°€ 호좜된 μ΄ν›„μ—λŠ” μΌμ •μ‹œκ°„ λ™μ•ˆ ν•΄λ‹Ή ν•¨μˆ˜κ°€ λ‹€μ‹œ ν˜ΈμΆœλ˜μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.
  • DebounceλŠ” νŠΉμ • μ‹œκ°„λ‚΄μ— λ°œμƒν•œ λ™μΌν•œ 이벀트λ₯Ό κ·Έλ£Ήν™”ν•˜μ—¬ 졜초의 μ΄λ²€νŠΈλ‚˜ λ§ˆμ§€λ§‰ 이벀트만 μ‹€ν–‰ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.
  • μŠ€ν¬λ‘€μ΄λ‚˜ μ°½ 크기 쑰절과 같은 이벀트 처리 ν•¨μˆ˜κ°€ μ œν•œμ—†μ΄ μ‹€ν–‰λ˜λ©΄ μ‚¬μš©μžκ°€ 쑰금만 움직여도 μˆ˜λ§Žμ€ ν•¨μˆ˜κ°€ ν˜ΈμΆœλ©λ‹ˆλ‹€. λ™μΌν•œ ν•¨μˆ˜λŠ” ν•œλ²ˆλ§Œ μ‹€ν–‰ν•˜λ„λ‘ ν•˜μ—¬ λ¦¬μ†ŒμŠ€λ₯Ό μ•„λ‚„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 가비지 μ»¬λ ‰μ…˜μ„ μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 도달가λŠ₯μƒνƒœ(Reachability)λ₯Ό ν™•μΈν•΄μ„œ μ–΄λ–€ 객체가 λ³€μˆ˜μ— μ˜ν•΄ 참쑰될 수 μžˆλŠ” μƒνƒœκ°€ μ•„λ‹ˆλΌλ©΄ ν•΄λ‹Ή 객체λ₯Ό κ°μ œν•©λ‹ˆλ‹€.
  • 가비지 μ»¬λ ‰ν„°λŠ” λ³€μˆ˜μ™€ 같은 루트λ₯Ό μ„€μ •ν•˜κ³  λ£¨νŠΈλ‘œλΆ€ν„° 도달할 수 μžˆλŠ” λͺ¨λ“  객체λ₯Ό λ°©λ¬Έν•˜μ—¬ λ§ˆν‚Ήμ„ ν•©λ‹ˆλ‹€. λ§Œμ•½ λ§ˆν‚Ήλ˜μ§€ μ•Šμ€ 객체듀이 μžˆλ‹€λ©΄ unreachable 이 λ˜μ–΄ μ‚­μ œν•©λ‹ˆλ‹€.