λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
[개발] Practice/JavaScript ES6

[JavaScript / ES6] this & arrow function μ—°μŠ΅λ¬Έμ œ ν’€κΈ°

by Connecting-the-dots 2022. 4. 11.
728x90
λ°˜μ‘ν˜•

πŸ’‘ μ‹€μŠ΅ 포인트!

πŸ’œ 문제 1

🀍 κ°„λ‹¨ν•œ λ©”μ†Œλ“œ λ§Œλ“€κΈ°

var person = {
  name: 'Seoyun',
}

person.sayHi();  // Hi! I'm Seoyun.
  • person μ΄λΌλŠ” object κ°€ ν•˜λ‚˜ μžˆλŠ”λ°, 이 object 에 sayHi λΌλŠ” ν•¨μˆ˜(λ©”μ†Œλ“œ)λ₯Ό ν•˜λ‚˜ μΆ”κ°€ν•˜κ³ μž ν•œλ‹€.
  • μœ„μ˜ μ½”λ“œμ²˜λŸΌ person.sayHi() 라고 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ μ½˜μ†”μ°½μ— 'Hi! I'm Seoyun.' μ΄λΌλŠ” κΈ€μžκ°€ λ‚˜μ™€μ•Ό ν•œλ‹€.
  • 'Seoyun' 이라고 이름을 ν•˜λ“œμ½”λ”©ν•˜λŠ” 게 μ•„λ‹ˆλΌ μ‹€μ œ object 내에 μžˆλŠ” name 에 ν•΄λ‹Ήν•˜λŠ” 값이 좜λ ₯λ˜λ„λ‘ ν•΄λ³΄μž.

 

Q. sayHi() λΌλŠ” ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ μ–΄λ–»κ²Œ λ§Œλ“€λ©΄ 될까?

더보기
  var person = {
    name: 'Seoyun',
    sayHi: function(){
      console.log(`Hi! I'm ${this.name}.`)
    }
  }

  person.sayHi();  // Hi! I'm Seoyun.

πŸ’œ 문제 2

🀍 Object λ‚΄μ˜ 데이터λ₯Ό μ „λΆ€ λ”ν•΄μ£ΌλŠ” λ©”μ†Œλ“œ λ§Œλ“€κΈ°

var obj = { 
  data : [1,2,3,4,5] 
};
  • μœ„μ™€ 같이 obj λΌλŠ” object μžλ£Œν˜•μ΄ ν•˜λ‚˜ μžˆλ‹€.
  • 이 obj 에 add() λΌλŠ” ν•¨μˆ˜λ₯Ό ν•˜λ‚˜ λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€.
var obj = { 
  data : [1,2,3,4,5] 
};
obj.add();
  • 즉, μœ„μ™€ 같이 obj.add() 라고 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ obj.data μ•ˆμ˜ λͺ¨λ“  숫자λ₯Ό λ”ν•΄μ„œ μ½˜μ†”μ°½μ— 좜λ ₯ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

 

Q. μ–΄λ–»κ²Œ μ½”λ“œλ₯Ό 짜면 될까? (단, obj λΌλŠ” object μ€‘κ΄„ν˜Έ 내에 μ½”λ“œμ˜ μž‘μ„±μ€ κΈˆμ§€)

더보기
  var obj = {
    data: [1,2,3,4,5]
  }

  obj.add = function(){
    var total = 0;
    this.data.forEach(el => total+= el);
    console.log(total);
  }

  obj.add();

πŸ’œ 문제 3

🀍 setTimeout κ°œλ…μ •λ¦¬ν•˜κΈ°

setTimeout(μ½œλ°±ν•¨μˆ˜, msλ‹¨μœ„μ˜ μ‹œκ°„)
  • JavaScript μ—λŠ” νŠΉμ • μ½”λ“œλ‚˜ ν•¨μˆ˜λ₯Ό n 초 후에 μ‹€ν–‰ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” setTimeout μ΄λΌλŠ” μœ μš©ν•œ ν•¨μˆ˜κ°€ μžˆλ‹€.

 

setTimeout(function(){ console.log('Hello, world!') }, 1000)
  • 예λ₯Ό λ“€μ–΄, μœ„μ™€ 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ 1000ms 후에 μ™Όμͺ½μ— μžˆλŠ” μ½œλ°±ν•¨μˆ˜ λ‚΄μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•œλ‹€.
  • 1초 후에 Hello, world! κ°€ μ½˜μ†”μ°½μ— 좜λ ₯λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

 

function hello(){
  console.log('Hello, world!')
}

setTimeout(hello, 1000)
  • λ˜λŠ” μœ„μ™€ 같이 μ½œλ°±ν•¨μˆ˜ μžλ¦¬μ— 직접 미리 λ§Œλ“€μ–΄λ‘” ν•¨μˆ˜λ₯Ό λ„£μ–΄μ„œ μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€.
  • 단, μ½œλ°±ν•¨μˆ˜ μžλ¦¬μ— λ§Œλ“€μ–΄λ‘” ν•¨μˆ˜λ₯Ό λ„£μ–΄ μ‚¬μš©ν•  λ•Œμ—λŠ” μ†Œκ΄„ν˜ΈλŠ” λΉΌμ•Ό ν•œλ‹€.

🀍 setTimeout μ΄μš©ν•΄λ³΄κΈ°

<button id="btn">λ²„νŠΌ</button>

<script>

  document.getElementById('btn').addEventListener('click', function(){
    console.log(this.innerHTML)
  });

</script>
  • λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ μ§€κΈˆ λˆ„λ₯Έ λ²„νŠΌμ— λ‹΄κΈ΄ κΈ€μžλ₯Ό μ½˜μ†”μ°½μ— 좜λ ₯ν•˜λŠ” κΈ°λŠ₯을 λ§Œλ“€μ—ˆλ‹€.

 

Q. 그럼 setTimeout 을 μ΄μš©ν•˜μ—¬ 1초 후에 this.innerHTML 을 μ½˜μ†”μ°½μ— 좜λ ₯ν•˜κ³  μ‹ΆμœΌλ©΄ μ–΄λ–»κ²Œ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λŠ” 것이 μ’‹μ„κΉŒ?

더보기
<button id="btn">λ²„νŠΌ</button>

<script>

  document.getElementById('btn').addEventListener('click', function(){
    setTimeout(()=>console.log(this.innerHTML), 1000)
  })

</script>

 

728x90
λ°˜μ‘ν˜•