λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ‹œλ„/Code-States

[D+44] ν™”μ‚΄ν‘œ ν•¨μˆ˜, ꡬ쑰뢄해 ν• λ‹Ή, this

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2020. 10. 20.

 

D+44

-  ν™”μ‚΄ν‘œ ν•¨μˆ˜, ꡬ쑰뢄해 ν• λ‹Ή, this -

(ν™”μ‚΄ν‘œ ν•¨μˆ˜, ꡬ쑰뢄해 ν• λ‹Ή, this)

 


 

 

ν™”μ‚΄ν‘œ ν•¨μˆ˜

 

 

ν•¨μˆ˜ ν‘œν˜„μ‹

const add = function (x, y) {
  return x + y
}

λ§Œμ•½ λ§€κ°œλ³€μˆ˜ x, yλ₯Ό μž…λ ₯λ°›μ•„ 두 수λ₯Ό λ”ν•œ 값을 λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€κ³ μž ν• λ•Œ

μš°λ¦¬λŠ” μœ„μ˜ μ½”λ“œλ₯Ό 생각할 것이닀.

 

ν•΄λ‹Ήμ½”λ“œλŠ” 기쑴에 μš°λ¦¬κ°€ μ•Œκ³  μžˆλŠ” ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ μš°λ¦¬λŠ” ν•΄λ‹Ή ν•¨μˆ˜ ν‘œν˜„μ‹μ„ λ”μš± κ°„λ‹¨ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€.

 

ν™”μ‚΄ν‘œ ν•¨μˆ˜

const add = (x, y) => {
  return x + y
}

λ°”λ‘œ ν™”μ‚΄ν‘œ ν•¨μˆ˜μ΄λ‹€.

 

const add = (x, y) => x + y 
const add = (x, y) => (x + y)   // O, 정상 μž‘λ™(μ†Œκ΄„ν˜Έ μ‚¬μš©κ°€λŠ₯)
const add = (x, y) => { x + y } // X, undefined 리턴 (μ€‘κ΄„ν˜Έ μ‚¬μš© λΆˆκ°€λŠ₯)

ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” function ν‚€μ›Œλ“œλ₯Ό ν™”μ‚΄ν‘œ(=>)둜 λŒ€μ²΄κ°€ κ°€λŠ₯ν•˜λ©°,

ν•¨μˆ˜ μ•ˆμ— return문만 μžˆμ„ κ²½μš°μ— return μƒλž΅μ΄ κ°€λŠ₯ν•˜λ‹€.

 

λ˜ν•œ νŒŒλΌλ―Έν„°κ°€ ν•œ 개일 κ²½μš°μ— μ†Œκ΄„ν˜Έλ„ μƒλž΅μ΄ κ°€λŠ₯ν•˜λ‹€.

(단, μ€‘κ΄„ν˜Έ({})λŠ” μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€)

 

ν™”μ‚΄ν‘œ ν•¨μˆ˜ νŠΉμ§•

•call, apply, bindλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.

 

•ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ 싀행은 thisλ₯Ό 결정짓지 μ•ŠλŠ”λ‹€.

 

ν™”μ‚΄ν‘œ ν•¨μˆ˜ λ§Œλ“€μ–΄λ³΄κΈ°

const adder = function(x) {
  return function(y) {
    return x + y
  }
}
adder(5)(7) // 12

μ—¬κΈ° xκ°’κ³Ό y값을 μž…λ ₯λ°›μ•„ 두 수λ₯Ό 더해 λ¦¬ν„΄μ‹œν‚€λŠ” ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ ν‘œν˜„λœ ν•¨μˆ˜μ‹μ„

ν™”μ‚΄ν‘œ ν•¨μˆ˜λ‘œ λ‚˜νƒ€λ‚΄ 보렀고 ν•œλ‹€.

 

1 > function ν‚€μ›Œλ“œλ₯Ό ν™”μ‚΄ν‘œ(=>)둜 λŒ€μ²΄ν•΄μ€€λ‹€.

const adder = (x) => {
  return (y) => {
    return x + y
  }
}

 

2 > μ•ˆμͺ½λΆ€ν„° μˆœμ„œλŒ€λ‘œ return을 μ—†μ• μ€€λ‹€.

const adder = (x) => {
  return (y) => x + y
}

⬇️

const adder = x => y => x + y

μ™„μ„±!

 

 


ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή

•λ°°μ—΄μ΄λ‚˜ 객체의 속성을 ν•΄μ²΄ν•˜μ—¬ κ·Έ 값을 κ°œλ³„ λ³€μˆ˜μ— 담을 수 있게 ν•˜λŠ” JavaScript ν‘œν˜„μ‹

 

 

ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή

var x = [1, 2, 3, 4, 5];
var [y, z] = x; // ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή
console.log(y); // 1
console.log(z); // 2

ν• λ‹Ήλ¬Έμ˜ μ’Œλ³€μ—μ„œ μ‚¬μš©ν•˜μ—¬, μ›λž˜ λ³€μˆ˜μ—μ„œ μ–΄λ–€ 값을 λΆ„ν•΄ν•΄ 할당할지λ₯Ό μ •μ˜ν•œλ‹€.

 

 


this ν‚€μ›Œλ“œ

•ν•¨μˆ˜ μ‹€ν–‰μ‹œ ν˜ΈμΆœλ°©λ²•μ— μ˜ν•΄ κ²°μ •λ˜λŠ” νŠΉλ³„ν•œ 객체

 

•ν•¨μˆ˜ μ‹€ν–‰μ‹œ κ²°μ •λ˜λ―€λ‘œ μ‹€ν–‰λ˜λŠ” λ§₯락에 따라 λ‹€λ₯΄κ²Œ 결정됨

 

 

'this'λ₯Ό λ°”μΈλ”©ν•˜λŠ” 5가지 νŒ¨ν„΄

νŒ¨ν„΄ λ°”μΈλ”©λ˜λŠ” 객체 μ„€λͺ…
Method 호좜 λΆ€λͺ¨ 객체 ν•˜λ‚˜μ˜ 객체에 κ°’κ³Ό μ—°κ΄€λœ λ©”μ†Œλ“œλ₯Ό λ¬Άμ–΄μ„œ μ‚¬μš©ν•  λ•Œ 주둜 μ‚¬μš©ν•¨
new ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•œ μƒμ„±μž 호좜 μƒˆλ‘­κ²Œ μƒμ„±λœ (new) μΈμŠ€ν„΄μŠ€ 객체 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 주둜 ν•˜μš©ν•¨
.call λ˜λŠ” .apply 호좜 첫번째 인자둜 μ „λ‹¬λœ 객체 this 값을 νŠΉμ •ν•  λ•Œ μ‚¬μš©ν•˜λ©° 특히 apply의 경우 λ°°μ—΄μ˜ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό ν’€μ–΄μ„œ 인자둜 λ„˜κΈ°κ³ μž ν• λ•Œ μœ μš©ν•¨
νŒ¨ν„΄ λ°”μš΄λ”©λ˜λŠ” 객체 (λΈŒλΌμš°μ €) λ°”μΈλ”©λ˜λŠ” 객체 (node.js)
Global window module.exports
Function 호좜 window global

 

 

Method 호좜

λ©”μ†Œλ“œ ν˜ΈμΆœμ€ 객체에 λ‹΄κΈ΄ ν•¨μˆ˜, 즉 λΆ€λͺ¨κ°€ μžˆλŠ” 것이라고 λ³Ό 수 μžˆλ‹€.

 

즉, '객체.λ©”μ†Œλ“œ()'κ³Ό 같이 객체 λ‚΄μ—μ„œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 방법을 μ˜λ―Έν•œλ‹€.

 

μ΄λ•Œ, λΆ€λͺ¨κ°€ μžˆλŠ” λ…€μ„μ—μ„œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  경우 thisλŠ” 직계뢀λͺ¨ 였브젝트λ₯Ό κ°€μ Έμ˜¨λ‹€.

let counter1 = {
  value: 0,
  increase: function() {
    this.value++ // λ©”μ†Œλ“œ ν˜ΈμΆœμ„ ν•  경우, thisλŠ” counter1을 κ°€λ¦¬ν‚΅λ‹ˆλ‹€
  },
  decrease: function() {
    this.value--
  },
  getValue: function() {
    return this.value
  }
}

counter1.increase()
counter1.increase()
counter1.increase()
counter1.decrease()
counter1.getValue() // 2

 

 

μƒμ„±μž 호좜

new μ—°μ‚°μžλ‘œ μƒμ„ λœ ν•¨μˆ˜ μ˜μ—­μ˜ thisλ₯Ό λ‚˜νƒ€λ‚΄λ©° μ΄λ•Œμ˜ thisλŠ” μƒμ„±μžλ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

class Counter {
  constructor() {
    this.value = 0; // μƒμ„±μž ν˜ΈμΆœμ„ ν•  경우, thisλŠ” new ν‚€μ›Œλ“œλ‘œ μƒμ„±ν•œ Counter의 μΈμŠ€ν„΄μŠ€μž…λ‹ˆλ‹€
  }
  increase() {
    this.value++
  }
  decrease() {
    this.value--
  }
  getValue() {
    return this.value
  }
}

let counter1 = new Counter() // μƒμ„±μž 호좜
counter1.increase()
counter1.getValue() // 1

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€