This value in Javascript

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜λŠ” 호좜될 λ•Œ, λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λ˜λŠ” μΈμžκ°’ 이외에, arguments 객체와 thisλ₯Ό μ „λ‹¬λ°›λŠ”λ‹€.

function example(someNumber) {
 console.log(arguments);
 console.log(this);
 console.log(someNumber);
}

example(2)


----------------------------------------------------------
[Arguments] { '0': 2 }
<ref *1> Object [global] {
  global: [Circular *1],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  },
  queueMicrotask: [Function: queueMicrotask],
  performance: Performance {
    nodeTiming: PerformanceNodeTiming {
      name: 'node',
      entryType: 'node',
      startTime: 0,
      duration: 26.50162499397993,
      nodeStart: 0.9319169968366623,
      v8Start: 1.9625839963555336,
      bootstrapComplete: 19.07591699808836,
      environment: 10.603083997964859,
      loopStart: -1,
      loopExit: -1,
      idleTime: 0
    },
    timeOrigin: 1669163218176.664
  },
  clearImmediate: [Function: clearImmediate],
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  }
}
2

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 경우 Java와 같이 this에 λ°”μΈλ”©λ˜λŠ” κ°μ²΄λŠ” ν•œκ°€μ§€κ°€ μ•„λ‹ˆλΌ ν•΄λ‹Ή ν•¨μˆ˜ 호좜 방식에 따라 this에 λ°”μΈλ”©λ˜λŠ” 객체가 달라진닀.

ν•¨μˆ˜μ˜ μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•˜λŠ” 방식인 Lexical ScopeλΌλŠ” 것이 μžˆλ‹€.

이λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•΄μ„œ λ¨Όμ € μŠ€μ½”ν”„λΆ€ν„° 짚고 λ„˜μ–΄κ°€μž.

μŠ€μ½”ν”„

μŠ€μ½”ν”„λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ 기본적인 κ°œλ…μ΄λ‹€.

이름이 같은 λ³€μˆ˜ xκ°€ μ „μ—­μ—μ„œ 1번, ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 1번 μ„ μ–Έλ˜μ—ˆλ‹€.

μš°λ¦¬λŠ” 이미 ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλŠ” function scope, μ „μ—­μ—μ„œλŠ” global scopeκ°€ 좜λ ₯λ˜λ¦¬λΌλŠ” 것을 μ•Œκ³ μžˆλ‹€.

μŠ€μ½”ν”„λŠ” μ°Έμ‘° λŒ€μƒ μ‹λ³„μžλ₯Ό μ°Ύμ•„λ‚΄κΈ° μœ„ν•œ κ·œμΉ™μ΄λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 이 κ·œμΉ™λŒ€λ‘œ μ‹λ³„μžλ₯Ό μ°ΎλŠ”λ‹€.

μœ„ μ˜ˆμ œμ—μ„œ 전역에 μ„ μ–Έλœ λ³€μˆ˜ xλŠ” 어디에든 μ°Έμ‘°ν•  수 μžˆλ‹€.

ν•˜μ§€λ§Œ ν•¨μˆ˜ foo λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜ xλŠ” ν•¨μˆ˜ foo λ‚΄λΆ€μ—μ„œλ§Œ μ°Έμ‘°ν•  수 있고 ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” μ°Έμ‘°ν•  수 μ—†λ‹€. μ΄λŸ¬ν•œ κ·œμΉ™μ„ μŠ€μ½”ν”„λΌκ³  ν•œλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μŠ€μ½”ν”„λ₯Ό ꡬ뢄해보면 λ‹€μŒκ³Ό 같이 2 κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

μ „μ—­ μŠ€μ½”ν”„

μ½”λ“œ μ–΄λ””μ—μ„œλ“ μ§€ μ°Έμ‘° κ°€λŠ₯

μ§€μ—­ μŠ€μ½”ν”„

ν•¨μˆ˜ μ½”λ“œ 블둝이 λ§Œλ“  μŠ€μ½”ν”„, ν•¨μˆ˜ μžμ‹ κ³Ό ν•˜μœ„ ν•¨μˆ˜μ—μ„œ μ°Έμ‘° κ°€λŠ₯

λ³€μˆ˜μ˜ κ΄€μ μ—μ„œ μŠ€μ½”ν”„λ₯Ό κ΅¬λΆ„ν•˜λ©΄ λ‹€μŒκ³Ό 같이 λ‚˜λˆŒ 수 μžˆλ‹€.

μ „μ—­ λ³€μˆ˜

μ „μ—­μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜, μ–΄λ””μ„œλ“  μ°Έμ‘° κ°€λŠ₯

μ§€μ—­ λ³€μˆ˜

μ§€μ—­(ν•¨μˆ˜)λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜μ΄λ©° κ·Έ μ§€μ—­κ³Ό κ·Έ μ§€μ—­μ˜ ν•˜λΆ€ μ§€μ—­μ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆλ‹€.

λ³€μˆ˜λŠ” μ„ μ–Έ μœ„μΉ˜μ— μ˜ν•΄ μŠ€μ½”ν”„λ₯Ό κ°€μ§€κ²Œ λœλ‹€.

즉, μ „μ—­μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” μ „μ—­ μŠ€μ½”ν”„λ₯Ό κ°–λŠ” μ „μ—­ λ³€μˆ˜κ°€ 되고, μ§€μ—­μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” μ§€μ—­ μŠ€μ½”ν”„λ₯Ό κ°–λŠ” μ§€μ—­ λ³€μˆ˜κ°€ λœλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μŠ€μ½”ν”„λŠ” 타 μ–Έμ–΄μ™€λŠ” λ‹€λ₯Έ νŠΉμ§•μ΄ μžˆλ‹€.

C-Family languageλŠ” λΈ”λ‘λ ˆλ²¨ μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄μ§€λ§Œ, μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜λ ˆλ²¨ μŠ€μ½”ν”„λ₯Ό λ”°λ₯Έλ‹€.

λΈ”λ‘λ ˆλ²¨ μŠ€μ½”ν”„ : μ½”λ“œ 블둝 λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ‹€.

ν•¨μˆ˜λ ˆλ²¨ μŠ€μ½”ν”„ : ν•¨μˆ˜ μ½”λ“œ 블둝 λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜κ³  ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” μœ νš¨ν•˜μ§€ μ•ŠμŒ

μœ„μ˜ μ˜ˆμ‹œμ—μ„œ xλŠ” ν•¨μˆ˜λ ˆλ²¨ μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄κΈ° λ•Œλ¬Έμ— xλŠ” 1이 κ·ΈλŒ€λ‘œ 좜λ ₯되고, yλŠ” λΈ”λ‘λ ˆλ²¨ μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄κΈ° λ•Œλ¬Έμ— 0이 좜λ ₯λœλ‹€.

μžμ„Έν•œ 사항은 let-var-const 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ©΄ μ’‹λ‹€.

λΉ„ λΈ”λ‘λ ˆλ²¨ μŠ€μ½”ν”„

μœ„μ˜ μ½”λ“œλŠ” λ†€λžκ²Œλ„ μ—λŸ¬ 없이 싀행이 λœλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 블둝 레벨 μŠ€μ½”ν”„λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•¨μˆ˜ λ°–μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” μ½”λ“œ 블둝 λ‚΄μ—μ„œ μ„ μ–Έλ˜μ—ˆλ‹€ ν•  지라도 λͺ¨λ‘ μ „μ—­ μŠ€μ½”ν”„λ₯Ό κ°€μ§„λ‹€.

λ”°λΌμ„œ λ³€μˆ˜ iλŠ” μ „μ—­ λ³€μˆ˜μ΄λ‹€.

ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λ₯Ό μ‚¬μš©ν•œλ‹€.

즉, ν•¨μˆ˜ λ‚΄μ—μ„œ μ„ μ–Έλœ λ§€κ°œλ³€μˆ˜μ™€ λ³€μˆ˜λŠ” ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” μœ νš¨ν•˜μ§€ μ•Šλ‹€. λ”°λΌμ„œ λ³€μˆ˜ bλŠ” μ§€μ—­ λ³€μˆ˜μ΄λ‹€.

μ „μ—­ μ˜μ—­μ—μ„œλŠ” μ „μ—­λ³€μˆ˜λ§Œ, μ§€μ—­ μ˜μ—­μ—μ„œλŠ” μ§€μ—­λ³€μˆ˜μ™€ μ „μ—­λ³€μˆ˜ λͺ¨λ‘ μ°Έμ‘°κ°€ κ°€λŠ₯ν•˜λ‹€.

κ·ΈλŸ¬λ‚˜ λ³€μˆ˜λͺ…이 μ€‘λ³΅λ˜λŠ” 경우, μ§€μ—­ λ³€μˆ˜λ₯Ό μš°μ„ ν•˜μ—¬ μ°Έκ³ ν•œλ‹€.

λ‚΄λΆ€ ν•¨μˆ˜λŠ” μžμ‹ μ„ ν¬ν•¨ν•˜κ³  μžˆλŠ” μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλ‹€.

μœ„μ˜ ν•¨μˆ˜ barμ—μ„œ μ°Έμ‘°ν•˜λŠ” λ³€μˆ˜ xλŠ” ν•¨μˆ˜ fooμ—μ„œ μ„ μ–Έλœ μ§€μ—­λ³€μˆ˜μ΄λ‹€.

μ΄λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ μŠ€μ½”ν”„ 체인에 μ˜ν•΄ μ°Έμ‘° μˆœμœ„μ—μ„œ μ „μ—­λ³€μˆ˜ xκ°€ λ’€λ‘œ λ°€λ ΈκΈ° λ•Œλ¬Έμ΄λ‹€.

λ ‰μ‹œμ»¬ μŠ€μ½”ν”„

μƒμœ„ μŠ€μ½”ν”„μ˜ 결정은 Lexical Scope에 μ˜ν•΄ 이루어진닀고 ν•˜λ©΄μ„œ μŠ€μ½”ν”„μ— λŒ€ν•œ μ„€λͺ…을 ν–ˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λΉ„λ‘―ν•œ λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄λŠ”λ°, ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ μ„ μ–Έν•˜μ˜€λŠ”μ§€μ— 따라 μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•œλ‹€.

λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λŠ” ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ ν˜ΈμΆœν•˜λŠ”μ§€κ°€ μ•„λ‹ˆλΌ 어디에 μ„ μ–Έν•˜μ˜€λŠ”μ§€μ— 따라 κ²°μ •λœλ‹€.

λ”°λΌμ„œ ν•¨μˆ˜ bar의 μƒμœ„ μŠ€μ½”ν”„λŠ” μ „μ—­ μŠ€μ½”ν”„μ΄κ³  μœ„ μ˜ˆμ œλŠ” μ „μ—­ λ³€μˆ˜ x의 κ°’ 1을 λ‘λ²ˆ 좜λ ₯ν•œλ‹€.


자, 이제 λ‹€μ‹œ λŒμ•„μ™€μ„œ this에 λŒ€ν•œ 이야기λ₯Ό ν•΄λ³΄μž.

ν•¨μˆ˜μ˜ μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•˜λŠ” 방식인 λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λŠ” ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ κ²°μ •λ˜κ³ , μ΄λŠ” this 바인딩과 λ‹€λ₯΄λ‹€.

thisλŠ” ν•¨μˆ˜κ°€ 호좜될 λ•Œ μ–΄λ–»κ²Œ ν˜ΈμΆœλ˜μ—ˆλŠ”μ§€μ— 따라 λ™μ μœΌλ‘œ κ²°μ •λœλ‹€.

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 방식은 λ‹€μ–‘ν•˜λ‹€. ν•œ 번 ν•˜λ‚˜μ”© μ°¨κ·Όμ°¨κ·Ό λ‹€λ£¨μ–΄λ³΄μž.

일단 크게 μ•„λž˜ λ°©μ‹μœΌλ‘œ μΌ€μ΄μŠ€λ₯Ό λ‚˜λˆ„μ–΄λ³΄μž.

ν•¨μˆ˜ 호좜

μ „μ—­ κ°μ²΄λŠ” λͺ¨λ“  객체의 μœ μΌν•œ μ΅œμƒμœ„ 객체둜, 일반적으둜 Browser-sideμ—μ„œλŠ” window , Server-side(Node.js)μ—μ„œλŠ” global 객체λ₯Ό μ˜λ―Έν•œλ‹€.

μ „μ—­κ°μ²΄λŠ” μ „μ—­ μŠ€μ½”ν”„(Global Scope)λ₯Ό κ°–λŠ” μ „μ—­λ³€μˆ˜(Global variable)λ₯Ό ν”„λ‘œνΌν‹°λ‘œ μ†Œμœ ν•œλ‹€.

κΈ€λ‘œλ²Œ μ˜μ—­μ— μ„ μ–Έν•œ ν•¨μˆ˜λŠ” μ „μ—­κ°μ²΄μ˜ ν”„λ‘œνΌν‹°λ‘œ μ ‘κ·Όν•  수 μžˆλŠ” μ „μ—­ λ³€μˆ˜μ˜ λ©”μ†Œλ“œμ΄λ‹€.

기본적으둜 thisλŠ” 전역객체(Global object)에 λ°”μΈλ”©λœλ‹€. μ „μ—­ν•¨μˆ˜λŠ” 물둠이고 심지어 λ‚΄λΆ€ν•¨μˆ˜μ˜ κ²½μš°λ„ thisλŠ” μ™ΈλΆ€ν•¨μˆ˜κ°€ μ•„λ‹Œ 전역객체에 λ°”μΈλ”©λœλ‹€.

λ‚΄λΆ€ν•¨μˆ˜λŠ” 일반 ν•¨μˆ˜, λ©”μ†Œλ“œ, μ½œλ°±ν•¨μˆ˜ μ–΄λ””μ—μ„œ μ„ μ–Έλ˜μ—ˆλ“  κ΄€κ²Œμ—†μ΄ thisλŠ” 전역객체λ₯Ό λ°”μΈλ”©ν•œλ‹€.

λ”κΈ€λΌμŠ€ ν¬λ½ν¬λ“œλŠ” β€œμ΄κ²ƒμ€ 섀계 λ‹¨κ³„μ˜ κ²°ν•¨μœΌλ‘œ λ©”μ†Œλ“œκ°€ λ‚΄λΆ€ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μžμ‹ μ˜ μž‘μ—…μ„ λ•κ²Œ ν•  수 μ—†λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€β€ 라고 λ§ν•œλ‹€.

λ‚΄λΆ€ν•¨μˆ˜μ˜ thisκ°€ 전역객체λ₯Ό μ°Έμ‘°ν•˜λŠ” 것을 νšŒν”Όλ°©λ²•μ€ μ•„λž˜μ™€ κ°™λ‹€.

μœ„ 방법 이외에도 μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” thisλ₯Ό λͺ…μ‹œμ μœΌλ‘œ 바인딩할 수 μžˆλŠ” apply, call, bind λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

λ©”μ†Œλ“œ 호좜

ν•¨μˆ˜κ°€ 객체의 ν”„λ‘œνΌν‹° 값이면 λ©”μ†Œλ“œλ‘œμ„œ ν˜ΈμΆœλœλ‹€. μ΄λ•Œ λ©”μ†Œλ“œ λ‚΄λΆ€μ˜ thisλŠ” ν•΄λ‹Ή λ©”μ†Œλ“œλ₯Ό μ†Œμœ ν•œ 객체, 즉 ν•΄λ‹Ή λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œ 객체에 λ°”μΈλ”©λœλ‹€.

μƒμ„±μž ν•¨μˆ˜ 호좜

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μƒμ„±μž ν•¨μˆ˜λŠ” 말 κ·ΈλŒ€λ‘œ 객체λ₯Ό μƒμ„±ν•˜λŠ” 역할을 ν•œλ‹€.

ν•˜μ§€λ§Œ μžλ°”μ™€ 같은 객체지ν–₯ μ–Έμ–΄μ˜ μƒμ„±μž ν•¨μˆ˜μ™€λŠ” λ‹€λ₯΄κ²Œ κ·Έ ν˜•μ‹μ΄ μ •ν•΄μ Έ μžˆλŠ” 것이 μ•„λ‹ˆλΌ κΈ°μ‘΄ ν•¨μˆ˜μ— new μ—°μ‚°μžλ₯Ό λΆ™μ—¬μ„œ ν˜ΈμΆœν•˜λ©΄ ν•΄λ‹Ή ν•¨μˆ˜λŠ” μƒμ„±μž ν•¨μˆ˜λ‘œ λ™μž‘ν•œλ‹€.

μ΄λŠ” λ°˜λŒ€λ‘œ μƒκ°ν•˜λ©΄ μƒμ„±μž ν•¨μˆ˜κ°€ μ•„λ‹Œ 일반 ν•¨μˆ˜μ— new μ—°μ‚°μžλ₯Ό λΆ™μ—¬ ν˜ΈμΆœν•˜λ©΄ μƒμ„±μž ν•¨μˆ˜μ²˜λŸΌ λ™μž‘ν•  수 μžˆλ‹€.

λ”°λΌμ„œ 일반적으둜 μƒμ„±μž ν•¨μˆ˜λͺ…은 첫문자λ₯Ό λŒ€λ¬Έμžλ‘œ κΈ°μˆ ν•˜μ—¬ ν˜Όλž€μ„ λ°©μ§€ν•˜λ €λŠ” λ…Έλ ₯을 ν•œλ‹€.

new μ—°μ‚°μžμ™€ ν•¨κ»˜ μƒμ„±μž ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ this 바인딩이 λ©”μ†Œλ“œλ‚˜ ν•¨μˆ˜ 호좜 λ•Œμ™€λŠ” λ‹€λ₯΄κ²Œ λ™μž‘ν•œλ‹€.

  • 빈 객체 생성 및 this 바인딩

μƒμ„±μž ν•¨μˆ˜μ˜ μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° μ „ 빈 객체가 μƒμ„±λœλ‹€.

이 빈 객체가 μƒμ„±μž ν•¨μˆ˜κ°€ μƒˆλ‘œ μƒμ„±ν•˜λŠ” 객체이닀. 이후 μƒμ„±μž ν•¨μˆ˜ λ‚΄μ—μ„œ μ‚¬μš©λ˜λŠ” thisλŠ” 이 빈 객체λ₯Ό 가리킨닀.

그리고 μƒμ„±λœ 빈 κ°μ²΄λŠ” μƒμ„±μž ν•¨μˆ˜μ˜ prototype ν”„λ‘œνΌν‹°κ°€ κ°€λ¦¬ν‚€λŠ” 객체λ₯Ό μžμ‹ μ˜ ν”„λ‘œν† νƒ€μž… 객체둜 μ„€μ •ν•œλ‹€.

  • thisλ₯Ό ν†΅ν•œ ν”„λ‘œνΌν‹° 생성

μƒμ„±λœ 빈 객체에 thisλ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μ μœΌλ‘œ ν”„λ‘œνΌν‹°λ‚˜ λ©”μ†Œλ“œλ₯Ό 생성할 수 μžˆλ‹€.

thisλŠ” μƒˆλ‘œ μƒμ„±λœ 객체λ₯Ό κ°€λ¦¬ν‚€λ―€λ‘œ thisλ₯Ό 톡해 μƒμ„±ν•œ ν”„λ‘œνΌν‹°μ™€ λ©”μ†Œλ“œλŠ” μƒˆλ‘œ μƒμ„±λœ 객체에 μΆ”κ°€λœλ‹€.

  • μƒμ„±λœ 객체 λ°˜ν™˜

λ°˜ν™˜λ¬Έμ΄ μ—†λŠ” 경우, this에 λ°”μΈλ”©λœ μƒˆλ‘œ μƒμ„±ν•œ 객체가 λ°˜ν™˜λœλ‹€. λͺ…μ‹œμ μœΌλ‘œ thisλ₯Ό λ°˜ν™˜ν•˜μ—¬λ„ κ²°κ³ΌλŠ” κ°™λ‹€.

λ°˜ν™˜λ¬Έμ΄ thisκ°€ μ•„λ‹Œ λ‹€λ₯Έ 객체λ₯Ό λͺ…μ‹œμ μœΌλ‘œ λ°˜ν™˜ν•˜λŠ” 경우, thisκ°€ μ•„λ‹Œ ν•΄λ‹Ή 객체가 λ°˜ν™˜λœλ‹€.

이 λ•Œ thisλ₯Ό λ°˜ν™˜ν•˜μ§€ μ•Šμ€ ν•¨μˆ˜λŠ” μƒμ„±μž ν•¨μˆ˜λ‘œμ„œμ˜ 역할을 μˆ˜ν–‰ν•˜μ§€ λͺ»ν•œλ‹€. λ”°λΌμ„œ μƒμ„±μž ν•¨μˆ˜λŠ” λ°˜ν™˜λ¬Έμ„ λͺ…μ‹œμ μœΌλ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

apply/call/bind 호좜

this에 바인딩될 κ°μ²΄λŠ” ν•¨μˆ˜ 호좜 νŒ¨ν„΄μ— μ˜ν•΄ κ²°μ •λœλ‹€.

μ΄λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μˆ˜ν–‰ν•˜λŠ” 것이닀.

μ΄λŸ¬ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ 암묡적 this 바인딩 이외에 thisλ₯Ό νŠΉμ • 객체에 λͺ…μ‹œμ μœΌλ‘œ λ°”μΈλ”©ν•˜λŠ” 방법도 μ œκ³΅λœλ‹€.

이것을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 것이

  • Function.prototype.apply

  • Function.prototype.call

λ©”μ†Œλ“œμ΄λ‹€.

이 λ©”μ†Œλ“œλ“€μ€ λͺ¨λ“  ν•¨μˆ˜ 객체의 ν”„λ‘œν† νƒ€μž… 객체인 Function.prototype 객체의 λ©”μ†Œλ“œμ΄λ‹€.

κΈ°μ–΅ν•΄μ•Ό ν•  것은 apply() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” μ£Όμ²΄λŠ” ν•¨μˆ˜μ΄λ©° apply() λ©”μ†Œλ“œλŠ” thisλ₯Ό νŠΉμ • 객체에 바인딩할 뿐 본질적인 κΈ°λŠ₯은 ν•¨μˆ˜ ν˜ΈμΆœμ΄λΌλŠ” 것이닀.

Sources …

Last updated