πŸͺ΄ μ„±μž₯일지

μ±… ν–‰λ³΅ν•œ 이기주의자(웨인 닀이어)의 λ‚΄μš©μ— μžκ·Ήλ°›μ•„ μ‹œμž‘ν•˜λŠ” μ†Œλ°•ν•œ μ„±μž₯기둝

μ‚΄μ•„μžˆλŠ” 꽃과 죽은 꽃은 μ–΄λ–»κ²Œ κ΅¬λ³„ν•˜λŠ”κ°€?
μ„±μž₯ν•˜κ³  μžˆλŠ” 것이 μ‚΄μ•„ μžˆλŠ” 것이닀.
생λͺ…μ˜ μœ μΌν•œ μ¦κ±°λŠ” μ„±μž₯이닀!

🌳 ν‚€μ›Œλ“œ

μ΅œλŒ€ν•œ κ°„λ‹¨ν•˜κ²Œ 정리, 좔후에 λ³΄λ©΄μ„œ 슀슀둜 μ„€λͺ…

⭐⭐⭐ JavaScript this 2nd

bind λ©”μ„œλ“œ

call λ©”μ„œλ“œμ™€ μœ μ‚¬ν•˜μ§€λ§Œ, call λ©”μ„œλ“œλŠ” 객체와 인수λ₯Ό λ°›μ•„ λ°”λ‘œ ν˜ΈμΆœν•˜λŠ” 반면 bind의 경우 ν•΄λ‹Ή 객체 ν˜Ήμ€ 인수λ₯Ό 받은 ν•¨μˆ˜λ₯Ό λ°˜ν™˜

var func = function (a, b, c) {
  console.log(this, a, b, c);
};

var bindFunc = func.bind({ test: 1 });
bind(1, 2, 3);
// {test: 1} 1 2 3 좜λ ₯

// μ΄λ ‡κ²Œ bind λ©”μ„œλ“œκ°€ 적용된 ν•¨μˆ˜λŠ” 확인이 κ°€λŠ₯(μ½”λ“œλ₯Ό μΆ”μ ν•˜κΈ°μ— 용이)

console.log(func.name); // func
console.log(bindFunc.name); // bound func

λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ ν•¨μˆ˜ 호좜 μ‹œ λ©”μ„œλ“œμ˜ thisλ₯Ό λ°”λΌλ³΄κ²Œ ν•˜κΈ°

var objCall = {
  method: function () {
    console.log(this);
    var inner = function () {
      console.log(this);
    };
    inner().call(this); // λ©”μ„œλ“œμ˜ this, 즉 objCall 객체λ₯Ό μ „λ‹¬ν•˜λ©° 호좜
  },
};

var objBind = {
  method: function () {
    console.log(this);
    var inner = function () {
      console.log(this);
    }.bind(this); // μ• μ΄ˆμ— ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•  λ•Œ, λ©”μ„œλ“œμ˜ this인 objBind 객체λ₯Ό 전달
    inner();
  },
};

βž• μ½œλ°±ν•¨μˆ˜λ₯Ό 인자둜 λ°›λŠ” λ©”μ„œλ“œ 쀑 μΌλΆ€λŠ” this둜 지정할 객체λ₯Ό 인자둜 같이 λ°›μŒ

var arr = [1, 2, 3];

// 1. λ©”μ„œλ“œ λ‚΄μ—μ„œ μ½œλ°±ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λ―€λ‘œ this -> window
arr.forEach(function (value) {
  console.log(value);
  console.log(this);
});

// 2. μ½œλ°±ν•¨μˆ˜κ°€ 바인딩할 thisλ₯Ό μ „λ‹¬ν•˜μ˜€μœΌλ―€λ‘œ this -> {test: 1}
arr.forEach(
  function (value) {
    console.log(value);
    console.log(this);
  },
  { test: 1 },
);

/* 3. 2λ²ˆμ—μ„œ μ½œλ°±μ„ ν™”μ‚΄ν‘œν•¨μˆ˜λ‘œ ν•œλ‹€λ©΄? => this -> window
ν™”μ‚΄ν‘œν•¨μˆ˜λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ—μ„œ Thisbinding 과정이 μ—†κΈ° λ•Œλ¬Έ
즉, 바인딩할 객체λ₯Ό μ „λ‹¬ν•΄μ€˜λ„ 바인딩 자체λ₯Ό ν•˜μ§€ μ•ŠμŒ! */
arr.forEach(
  (value) => {
    console.log(value);
    console.log(this);
  },
  { test: 1 },
);