λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Study/JavaScript

[λͺ¨λ˜μžλ°”μŠ€ν¬λ¦½νŠΈ]04 ν”„λ‘œκ·Έλž˜λ° ν•œλ°œ 더 λ‚˜κ°€κΈ°, ν•¨μˆ˜μ™€ μŠ€μ½”ν”„

04-1. ν”„λ‘œκ·Έλž˜λ°μ˜ 꽃, ν•¨μˆ˜

ν•¨μˆ˜: λ™μž‘ν•΄μ•Ό ν•  λͺ©μ λŒ€λ‘œ μ—¬λŸ¬ 개의 λͺ…령을 λ¬ΆλŠ” 것

 

ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

  • μ²˜λ¦¬ν•΄μ•Όν•  κΈ°λŠ₯이 λ§Žμ§€λ§Œ, ν•¨μˆ˜ 없이 μž‘μ„±ν•œλ‹€λ©΄ μ‚¬μš©μžκ°€ μž…λ ₯ν•  λ•Œλ§ˆλ‹€ 같은 λͺ…령을 계속 λ°˜λ³΅ν•΄μ•Όν•¨
  • ν•˜μ§€λ§Œ, κΈ°λŠ₯λ³„λ‘œ ν•¨μˆ˜λ₯Ό λ”°λ‘œ λ§Œλ“€μ–΄ λ‘”λ‹€λ©΄ ν•„μš”ν•  λ•Œλ§ˆλ‹€ μ μ ˆν•œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ ν•¨μˆ˜λ³„λ‘œ μ‹€ν–‰ν•  수 있음

 

ν•¨μˆ˜ μ„ μ–Έν•˜κ³  ν˜ΈμΆœν•˜κΈ°

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—λŠ” λ‹€μ–‘ν•œ ν•¨μˆ˜λ“€μ΄ 미리 λ§Œλ“€μ–΄μ Έ μžˆμœΌλ―€λ‘œ κ°œλ°œμžλŠ” ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό κ°€μ Έμ™€μ„œ μ‚¬μš©λ§Œ ν•˜λ©΄ 됨
  • ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•ŒλŠ” functionμ΄λΌλŠ” μ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•˜κ³ , ν•¨μˆ˜ 이름을 적은 ν›„ μ€‘κ΄„ν˜Έ μ•ˆμ— μ‹€ν–‰ν•  μ—¬λŸ¬ 개의 λͺ…령을 묢음
  • ν•¨μˆ˜ 이름을 μ λŠ” 이유: λ‚˜μ€‘μ— 이름을 μ‚¬μš©ν•΄ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œ
function ν•¨μˆ˜λͺ…(){
	λͺ…λ Ή(λ“€)
}
  • μ„ μ–Έν•œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  땐 ν•¨μˆ˜ 이름을 μ‚¬μš©ν•˜μ—¬ ν˜ΈμΆœν•¨
  • ν˜ΈμΆœν•  λ•ŒλŠ” ν•¨μˆ˜ 이름 뒀에 κΌ­ μ†Œκ΄„ν˜Έ(( ))λ₯Ό λΆ™μ—¬μ•Ό 함
  • ν•¨μˆ˜ μ„ μ–Έ μ†ŒμŠ€λŠ” 어디에 넣어도 상관 μ—†μŒ. ν•˜μ§€λ§Œ μ›Ή λΈŒλΌμš°μ €μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ μ†ŒμŠ€λ₯Ό 해석할 λ•Œ λ³€μˆ˜ μ„ μ–Έμ΄λ‚˜ ν•¨μˆ˜ μ„ μ–Έ 뢀뢄을 κ°€μž₯ λ¨Όμ € ν•΄μ„ν•˜λ―€λ‘œ 보톡 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” μ†ŒμŠ€λ₯Ό μ‹€ν–‰ μ†ŒμŠ€λ³΄λ‹€ μ•žμ— 적음

 

λ§€κ°œλ³€μˆ˜μ™€ 인수, return λ¬Έ

λ§€κ°œλ³€μˆ˜

  • λ§€κ°œλ³€μˆ˜: ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ™ΈλΆ€μ—μ„œ 값을 λ°›λŠ” λ³€μˆ˜
  • ν•¨μˆ˜ 이름 μ˜† μ†Œκ΄„ν˜Έ μ•ˆμ— λ§€κ°œλ³€μˆ˜ 이름을 λ„£μŒ
  • λ§€κ°œλ³€μˆ˜λŠ” μ„ μ–Έλœ ν•¨μˆ˜μ—μ„œλ§Œ μ‚¬μš©ν•˜κ³ , ν•¨μˆ˜μ— μ—¬λŸ¬ 개의 λ§€κ°œλ³€μˆ˜κ°€ ν•„μš”ν•  λ•ŒλŠ” λ§€κ°œλ³€μˆ˜ 사이에 μ‰Όν‘œ(,)λ₯Ό λ„£μœΌλ©΄μ„œ λ‚˜μ—΄

 

인수

인수: λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ μ‹€μ œλ‘œ 값을 λ„˜κ²¨μ£ΌλŠ” 것
(λ§€κ°œλ³€μˆ˜μ˜ 인수λ₯Ό ν†΅ν‹€μ–΄μ„œ '인자'라고도 함)

function sum(a, b){		// a, b: λ§€κ°œλ³€μˆ˜
	let result = a + b;
    alert(`두 수의 ν•©: ${result}`)
}

sum(10, 20);	// 10, 20: 인수

 

return λ¬Έ

  • ν•¨μˆ˜μ—μ„œ μ‹€ν–‰ν•œ ν›„ κ²°κ³ΌκΉŒμ§€ μ²˜λ¦¬ν•  수 μžˆμ§€λ§Œ, ν•¨μˆ˜μ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό λ°›μ•„ 또 λ‹€μ‹œ μ²˜λ¦¬ν•΄μ•Ό ν•  κ²½μš°λ„ 있음. μ΄λ•Œ ν•¨μˆ˜μ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œ μ‹œμ μœΌλ‘œ λ„˜κ²¨μ€˜μ•Όν•¨ → 'ν•¨μˆ˜κ°’μ„ λ°˜ν™˜ν•œλ‹€'

 

κΈ°λ³Έ λ§€κ°œλ³€μˆ˜

  • μ—ν¬λ§ˆμŠ€ν¬λ¦½νŠΈ 2015λΆ€ν„° λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ λ§€κ°œλ³€μˆ˜μ˜ 기본값을 μ§€μ •ν•˜λŠ” κΈ°λŠ₯도 생김
    → ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  λ•Œ μΈμˆ˜κ°€ λΆ€μ‘±ν•˜λ©΄ 기본값을 μ‚¬μš©ν•¨
function multiple(a, b = 5, c = 10){
	return a * b + c;
}

console.log(multiple(5, 10, 20));	// a = 5, b = 10, c = 20
console.log(multiple(10, 20));		// a = 10, b = 20, c = 10(default)
console.log(multiple(10));			// a = 10, b = 5(default), c = 10(default)

 

 

04-2. λ³€μˆ˜μ˜ 유효 λ²”μœ„, μŠ€μ½”ν”„

μŠ€μ½”ν”„: μ„ μ–Έν•œ λ³€μˆ˜κ°€ μ–΄λŠ λ²”μœ„κΉŒμ§€ 영ν–₯을 λ―ΈμΉ˜λŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 것

 

μŠ€μ½”ν”„

  • μŠ€μ½”ν”„: μ„ μ–Έν•œ λ³€μˆ˜μ˜ 적용 λ²”μœ„λ₯Ό 가리킴 → μ–΄λŠ μœ„μΉ˜μ—μ„œ λ³€μˆ˜λ₯Ό μ ‘κ·Όν•  수 μžˆλŠ”μ§€λ₯Ό 가리킴
  • ν”„λ‘œκ·Έλž¨μ—μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈ ν•΄μ„κΈ°μ—μ„œ μ†ŒμŠ€λ₯Ό μ½μ–΄λ‚΄λ €κ°€λ©΄μ„œ λ³€μˆ˜μ— λŒ€ν•œ μŠ€μ½”ν”„λ₯Ό λ§Œλ“¦
  • var(λ³€μˆ˜ μ„ μ–Έν•˜λŠ” μ˜ˆμ•½μ–΄)둜 μ„ μ–Έν•œ λ³€μˆ˜λŠ” 크게 '지역 μŠ€μ½”ν”„'와 'μ „μ—­ μŠ€μ½”ν”„'λ₯Ό 가짐

 

지역 μŠ€μ½”ν”„

  • λ³€μˆ˜μ˜ νŠΉμ • μ˜μ—­μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμ„ λ•Œ '지역 μŠ€μ½”ν”„λ₯Ό 가지고 μžˆλ‹€'κ³  말함 → '지역 λ³€μˆ˜'
  • ν•¨μˆ˜ μŠ€μ½”ν”„: λ³€μˆ˜λ₯Ό μ„ μ–Έν•œ ν•¨μˆ˜μ—μ„œλ§Œ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 의미
    → ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” 지역 μŠ€μ½”ν”„κ°€ 됨
fuction sum(a, b){
	var result = a + b;
}
console.log(result);	// ReferenceError
  • result λ³€μˆ˜κ°€ sum ν•¨μˆ˜ μ•ˆμ— μ„ μ–Έλ˜μ—ˆμœΌλ―€λ‘œ, result λ³€μˆ˜λŠ” ν•¨μˆ˜ μŠ€μ½”ν”„λ₯Ό 가지고, ν•¨μˆ˜λ₯Ό λ²—μ–΄λ‚˜λŠ” μˆœκ°„ result λ³€μˆ˜μ˜ μŠ€μ½”ν”„λŠ” 사라짐

 

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

  • ν”„λ‘œκ·Έλž¨ μ‹œμž‘ λΆ€λΆ„μ—μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” μŠ€μ½”ν”„
  • μ „μ—­ λ³€μˆ˜: μ „μ—­ μŠ€μ½”ν”„λ₯Ό κ°€μ§€μ§€λŠ” λ³€μˆ˜
var hi = "hello";	// μ „μ—­ λ³€μˆ˜

function greeting(){
	console.log(hi);
}

greeting()
  • μ „μ—­ λ³€μˆ˜λŠ” ν•¨μˆ˜μ˜ μ–΄λ””μ—μ„œλ‚˜ 값을 λ³€κ²½ν•  수 있음
  • ν•˜μ§€λ§Œ 곡동 μž‘μ—…ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ 경우 λ‹€λ₯Έ ν•¨μˆ˜μ—μ„œ μ „μ—­ λ³€μˆ˜λ₯Ό μˆ˜μ •ν•˜λ©΄ μ˜ˆμƒν•˜μ§€ λͺ»ν•œ κ²°κ³Όκ°€ λ‚˜μ˜¬ 수 μžˆμœΌλ―€λ‘œ μ£Όμ˜ν•΄μ•Όν•¨
  • λ³€μˆ˜ 이름 μ•žμ— var μ˜ˆμ•½μ–΄λ₯Ό 뢙이지 μ•ŠμœΌλ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ „μ—­ λ³€μˆ˜λ‘œ 인식함
  • μ΄λŸ¬ν•œ 문제둜 μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 κ°€μž₯ μ’‹μŒ
  • letμ΄λ‚˜ constλ₯Ό μ‚¬μš©ν•œ λ³€μˆ˜λ„ ν”„λ‘œκ·Έλž¨μ˜ 맨 μ•žμ— μ„ μ–Έν•˜λ©΄ ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš©ν•  수 있음
    → '슀크립트 μŠ€μ½”ν”„λ₯Ό 가진닀' ('μ „μ—­ μŠ€μ½”ν”„λ₯Ό 가진닀'라고 ν•˜μ§€ μ•ŠμŒ)

 

블둝 μŠ€μ½”ν”„

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 블둝: μ€‘κ΄„ν˜Έ({ })둜 λ‘˜λŸ¬μ‹ΈμΈ μ˜μ—­μ„ 가리킴
    블둝 μŠ€μ½”ν”„: λΈ”λ‘λ³„λ‘œ λ³€μˆ˜μ˜ 유효 λ²”μœ„κ°€ κ²°μ •λ˜λŠ” 것
  • letμ΄λ‚˜ constλ₯Ό μ‚¬μš©ν•΄ λ§Œλ“  λ³€μˆ˜λŠ” 기본적으둜 λ³€μˆ˜κ°€ μ„ μ–Έλœ λΈ”λ‘μ—μ„œλ§Œ μœ νš¨ν•¨ → '블둝 μŠ€μ½”ν”„λ₯Ό 가진닀'
  • 블둝 λ³€μˆ˜: 블둝 μŠ€μ½”ν”„λ₯Ό 가진 λ³€μˆ˜
const factor = 5;	// factor: λͺ¨λ“  블둝에 μ‚¬μš© κ°€λŠ₯

function calc(){		// 첫번째 블둝
	return num * factor;	// num λ³€μˆ˜μ— μ ‘κ·Όν•  수 μ—†μŒ
}
{// λ‘λ²ˆμ§Έ 블둝
    const num = 10;
    let result = calc();
    document.write(`result : ${result}`);
}

// κ²°κ³Ό: ReferenceError

// μœ„μ˜ μ½”λ“œ μˆ˜μ •
const factor = 5;

function calc(num){
	return num * factor;
}
{
    let result = calc(10);
    document.write(`result : ${result}`);
}

 

 

μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜, μ΄λ ‡κ²Œ μ‚¬μš©ν•˜μ„Έμš”

μžλ°”μŠ€ν¬λ¦½νŠΈ

  • μž₯점: μœ μ—°ν•œ μ–Έμ–΄μ—¬μ„œ λ‹€μ–‘ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” 뢀뢄이 많음
  • 단점: ν”„λ‘œκ·Έλž¨μ΄ 컀질수둝 κ°€λ…μ„±μ΄λ‚˜ 디버깅이 μ–΄λ €μ›Œμ§

→ μžλ°”μŠ€ν¬λ¦½νŠΈ 문법을 λ²—μ–΄λ‚˜μ§€ μ•ŠμœΌλ©΄μ„œ 가독성을 높이고 디버깅이 쉽도둝 λ³€μˆ˜λ₯Ό μ‚¬μš”ν•˜λŠ” 방법을 정리해 보자

 

β‘  var λ³€μˆ˜λ³΄λ‹€ let, const λ³€μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€

  • var λ³€μˆ˜λŠ” λ‹€μ‹œ μ„ μ–Έν•  수 μžˆμ–΄μ„œ μ‹€μˆ˜λ‘œ 같은 λ³€μˆ˜λ₯Ό λ‹€μ‹œ 선언해도 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ. 심지어 λ³€μˆ˜λ₯Ό λ¨Όμ € μ‹€ν–‰ν•œ ν›„ λ‚˜μ€‘μ— 선언해도 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ
  • 곡동 ν”„λ‘œμ νŠΈλΌλ©΄ λ³€μˆ˜λ₯Ό μž¬μ„ μ–Έν•  수 μ—†μœΌλ―€λ‘œ ν˜Έμ΄μŠ€νŒ… μ—†λŠ” letμ΄λ‚˜ const λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ•ˆμ „ν•¨

 

β‘‘ μ „μ—­ λ³€μˆ˜λŠ” μ΅œμ†Œν•œμœΌλ‘œ μ‚¬μš©ν•œλ‹€

  • μ „μ—­ λ³€μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“  κ³³μ—μ„œ μ ‘κ·Όν•  수 μžˆμ–΄μ„œ νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 있음
  • ν•˜μ§€λ§Œ μ–΄λ””μ„œλ“  값을 λ³€κ²½ν•  수 μžˆμœΌλ―€λ‘œ μ˜ˆμƒν•˜μ§€ λͺ»ν•œ κ³³μ—μ„œ 값이 λ‹¬λΌμ§ˆ 수 μžˆμœΌλ―€λ‘œ 그만큼 였λ₯˜κ°€ λ°œμƒν•  ν™•λ₯ μ΄ 높아짐
  • κ·ΈλŸ¬λ―€λ‘œ μ „μ—­ λ³€μˆ˜ μ‚¬μš©μ„ 쀄이고, ν”„λ‘œκ·Έλž¨μ—μ„œ 값이 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ const둜 μ„ μ–Έν•˜λŠ” 것이 μ’‹μŒ

 

β‘’ 객체 선언은 constλ₯Ό μ‚¬μš©ν•œλ‹€

  • 객체λ₯Ό μ„ μ–Έν•  λ•Œ ν”„λ‘œκ·Έλž˜λ° 도쀑 객체 μžμ²΄κ°€ λ°”λ€Œμ§€ μ•Šλ„λ‘ constλ₯Ό μ‚¬μš©ν•΄ 선언함
  • 객체λ₯Ό const둜 선언해도 객체 μ•ˆμ— μžˆλŠ” ν”„λ‘œνΌν‹°λŠ” μ–Όλ§ˆλ“  μˆ˜μ • κ°€λŠ₯함

 

  • var μ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•  경우, 'μ „μ—­ λ³€μˆ˜'와 '지역 λ³€μˆ˜'둜만 λ‚˜λ‰˜κ³ , μ „μ—­ λ³€μˆ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ΅œμƒμœ„ 객체인 window 객체에 μ €μž₯됨
  • constλ‚˜ let μ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•œ 경우, λ³€μˆ˜λŠ” μ „μ—­μœΌλ‘œ μ‚¬μš©ν•  λ•Œ μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” 슀크립트 μŠ€μ½”ν”„λ₯Ό 가짐. 블둝 μ•ˆμ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λΈ”λ‘μ•ˆμ—μ„œλ§Œ μ‚¬μš©ν•  수 있음

 

 

04-3. 이름 없이 μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜ ν‘œν˜„μ‹

읡λͺ… ν•¨μˆ˜

λ³€μˆ˜μ— ν• λ‹Ήν•΄μ„œ μ‚¬μš©ν•˜λŠ” 읡λͺ… ν•¨μˆ˜

  • 이름이 μ—†λŠ” ν•¨μˆ˜μ˜ 경우, ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•΄μ„œ μ‚¬μš©ν•  수 있음
let sum = function(a, b){
	return a + b;
}
console.log(`ν•¨μˆ˜ μ‹€ν–‰ κ²°κ³Ό : ${sum(10, 20)}`)

 

μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜

  • ν•œ 번만 μ‹€ν–‰ν•˜λŠ” ν•¨μˆ˜μΌ 경우 ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λ©΄μ„œ λ™μ‹œμ— μ‹€ν–‰ν•  수 있음
(function(a, b){
	let sum = a + b;
    console.log(`ν•¨μˆ˜ μ‹€ν–‰ κ²°κ³Ό : ${sum}`)
}(100, 200));	// λ§ˆμ§€λ§‰ μ„Έλ―Έμ½œλ‘ (;) 뢙이기

 

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

  • μ—ν¬λ§ˆμŠ€ν¬λ¦½νŠΈ 2015 버전뢀터 => ν‘œκΈ°λ²•(ν™”μ‚΄ν‘œ ν‘œκΈ°λ²•)을 μ‚¬μš©ν•΄ ν•¨μˆ˜λ₯Ό μ’€ 더 κ°„λ‹¨νžˆ μ„ μ–Έν•  수 있게 됨
  • 'ν™”μ‚΄ν‘œ ν•¨μˆ˜' λ˜λŠ” 'μ• λ‘œ νŽ‘μ…˜(arrow function)' 이라 뢀름
(λ§€κ°œλ³€μˆ˜) => {ν•¨μˆ˜ λ‚΄μš©}

 

λ§€κ°œλ³€μˆ˜κ°€ 없을 λ•Œ

  • λ§€κ°œλ³€μˆ˜κ°€ 없을 λ•ŒλŠ” λ§€κ°œλ³€μˆ˜κ°€ λ“€μ–΄κ°€λŠ” μ†Œκ΄„ν˜Έ 뢀뢄을 λΉ„μ›Œλ‘ 
  • ν•¨μˆ˜μ—μ„œ μ‹€ν–‰ν•  λͺ…령이 ν•œ 쀄뿐이라면 μ€‘κ΄„ν˜Έ({ })λ₯Ό μƒλž΅ν•  수 있음
  • ν•œ 쀄 λͺ…령에 return 문이 ν¬ν•¨λ˜μ–΄ μžˆλ‹€λ©΄ return도 μƒλž΅ κ°€λŠ₯함
let hi = function(){
	return `μ•ˆλ…•ν•˜μ„Έμš”?`;
}
hi()

// ↓

let hi = () => {return `μ•ˆλ…•ν•˜μ„Έμš”?`};
hi();

// ↓

let hi() = () => `μ•ˆλ…•ν•˜μ„Έμš”?`;
hi();

 

λ§€κ°œλ³€μˆ˜κ°€ 1개일 λ•Œ

  • λ§€κ°œλ³€μˆ˜κ°€ 1개인 경우 λ§€κ°œλ³€μˆ˜μ™€ μ†Œκ΄„ν˜Έλ₯Ό μƒλž΅ν•΄μ„œ μ‚¬μš© κ°€λŠ₯함
let hi = function(user){
	console.log(`${user}λ‹˜, μ•ˆλ…•ν•˜μ„Έμš”?`);
}
hi("홍길동");

// ↓

let hi = user => console.log(`${user}λ‹˜, μ•ˆλ…•ν•˜μ„Έμš”?`);
hi("홍길동");

 

λ§€κ°œλ³€μˆ˜κ°€ 2개 이상일 λ•Œ

  • λ§€κ°œλ³€μˆ˜κ°€ 2개 이상이면 (λ§€κ°œλ³€μˆ˜) => { ... }처럼 μ‚¬μš©ν•¨
let sum = function(a, b){
	return a + b;
}
sum(10, 20);

// ↓

let sum = (a, b) => a + b;
sum(10, 20);

 

콜백 ν•¨μˆ˜

  • 콜백 ν•¨μˆ˜: λ‹€λ₯Έ ν•¨μˆ˜μ˜ 인수둜 μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜

 

ν•¨μˆ˜ 이름 μ‚¬μš©ν•΄ 콜백 ν•¨μˆ˜ μ‹€ν–‰ν•˜κΈ°

const bttn = document.querySelector("button");	// λ²„νŠΌ μš”μ†Œλ₯Ό κ°€μ Έμ˜΄

function display(){
	alert("ν΄λ¦­ν–ˆμŠ΅λ‹ˆλ‹€.");
}

bttn.addEventListener("click", display);	// λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ display ν•¨μˆ˜λ₯Ό 싀행함
  • addEventListener() ν•¨μˆ˜μ—μ„œ 미리 μ„ μ–Έν•œ display() ν•¨μˆ˜λ₯Ό 인수둜 μ‚¬μš©ν•¨
    → μ΄λ ‡κ²Œ λ‹€λ₯Έ ν•¨μˆ˜μ˜ μΈμˆ˜κ°€ λ˜λŠ” ν•¨μˆ˜λ₯Ό '콜백 ν•¨μˆ˜' 라고 함
  • addEventListener() ν•¨μˆ˜ μ•ˆμ— display() ν•¨μˆ˜λ₯Ό 넣을 λ•Œ ν•¨μˆ˜ 이름 λ‹€μŒ μ†Œκ΄„ν˜Έκ°€ μ—†μŒ

 

ν•¨μˆ˜μ— 직접 μž‘μ„±ν•΄μ„œ 콜백 ν•¨μˆ˜ μ‹€ν–‰ν•˜κΈ°

  • ν•¨μˆ˜ 이름은 ν•„μš”ν•  λ•Œλ§ˆλ‹€ μ—¬λŸ¬ 번 μ‚¬μš©ν•΄ μ‹€ν–‰ν•˜κ±°λ‚˜ 콜백 ν•¨μˆ˜λ‘œ μ‚¬μš©ν•  수 있음
    ν•˜μ§€λ§Œ λ”± ν•œ 번만 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€λ©΄ λ”°λ‘œ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜μ§€ μ•Šκ³  ν•¨μˆ˜μ— 직접 콜백 ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 있음 
const bttn = document.querySelector("button");	// λ²„νŠΌ μš”μ†Œλ₯Ό κ°€μ Έμ˜΄

bttn.addEventListener("click", () => {	// λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ alertλ₯Ό μ‹€ν–‰
	alert("ν΄λ¦­ν–ˆμŠ΅λ‹ˆλ‹€.");
});

 

μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λŠ” 1κΈ‰ μ‹œλ―Ό

  1. λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆμ–΄μ•Ό ν•œλ‹€
  2. λ‹€λ₯Έ ν•¨μˆ˜μ˜ 인자둜 μ‚¬μš©ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€
  3. λ‹€λ₯Έ ν•¨μˆ˜μ—μ„œ λ°˜ν™˜κ°’μœΌλ‘œ λ°˜ν™˜ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€

 

λ³€μˆ˜μ— ν•¨μˆ˜ ν• λ‹Ήν•˜κΈ°

let sum = (a, b) => a + b;
sum(2, 10);

// ↓

function add(a, b){
	return a + b;
}
let sum = add;	// add 뒀에 () 뢙이지 X. 뢙이면 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€λŠ” 뜻
sum(2, 10);

 

ν•¨μˆ˜λ₯Ό λ‹€λ₯Έ ν•¨μˆ˜λ‘œ μ „λ‹¬ν•˜κΈ°

function hello(){
	return "μ•ˆλ…•ν•˜μ„Έμš”?";
}
function bye(){
	return "μ•ˆλ…•νžˆ κ°€μ„Έμš”.";
}

function userCheck(name, fn){	// fn ν•¨μˆ˜λ₯Ό 전달받아 μ‹€ν–‰
	console.log(`${name}λ‹˜`, fn());
}

userCheck("홍길동", hello);	// 홍길동, μ•ˆλ…•ν•˜μ„Έμš”?
userCheck("λ„λ ˆλ―Έ", bye);		// λ„λ ˆλ―Έ, μ•ˆλ…•νžˆ κ°€μ„Έμš”.
  • hello() ν•¨μˆ˜λ₯Ό 미리 μ •μ˜ν•΄ 놓고 login() ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  λ•Œ fn λ§€κ°œλ³€μˆ˜μ— hello() ν•¨μˆ˜λ₯Ό 인수둜 λ„˜κ²¨μ€„ 수 있음

 

ν•¨μˆ˜μ—μ„œ λ‹€λ₯Έ ν•¨μˆ˜ λ°˜ν™˜ν•˜κΈ°

// init() ν•¨μˆ˜μ—μ„œ λ‹€λ₯Έ ν•¨μˆ˜ λ°˜ν™˜ν•˜κΈ°
let ini = () => {
	return function(a, b){
    	return a - b > 0 ? a - b : b - a;
    }
}

// console.log(`init(30, 20) : ${init(30, 20)}`);	// (1)
console.log(`init()(30, 20) : ${init()(10, 20)}`);	// (2)

(1)의 결과

(2)의 결과

 

 

04-4. μ „κ°œ ꡬ문

μ „κ°œ ꡬ문: λ°°μ—΄μ²˜λŸΌ 값이 λ‹€μ–‘ν•œ 자료λ₯Ό ν•œκΊΌλ²ˆμ— 인수둜 λ„˜κ²¨μ£Όκ±°λ‚˜ λ°°μ—΄κ³Ό 배열을 ν•©ν•  λ•Œμ²˜λŸΌ 배열을 ν•˜λ‚˜μ˜ λ©μ–΄λ¦¬λ‘œ μ²˜λ¦¬ν•΄μ•Όν•  λ•Œ 유용

 

μ „κ°œ ꡬ문의 μž‘μ„± 방법

  • μ „κ°œ κ΅¬λ¬Έμ΄λž€, 말 κ·ΈλŒ€λ‘œ '값은 펼쳐 μ£ΌλŠ”' ꡬ문
fruits = ["apple", "banana", "grape"]
console.log(fruits)
console.log(...fruits)

  • '...' 기호λ₯Ό μ‚¬μš©
    → λ¬Έμžμ—΄μ΄λ‚˜ λ°°μ—΄, 객체처럼 μ—¬λŸ¬ 개의 값을 λ‹΄κ³  μžˆλŠ” μžλ£Œν˜•μ—μ„œ λ‹€λ₯Έ μ •λ³΄λŠ” ν•„μš” μ—†κ³  κ·Έ μ•ˆμ˜ κ°’λ§Œ κΊΌλ‚΄ μ‚¬μš©ν•˜λ €κ³  ν•  λ•Œ μ „κ°œ ꡬ문 유용

 

λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜

  • μ „κ°œ ꡬ문은 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œλ„ μ‚¬μš© κ°€λŠ₯
  • ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄μ„œ λ‚˜μ€‘μ— λͺ‡ 개의 인수λ₯Ό λ°›κ²Œ 될지 μ•Œ 수 μ—†λŠ” 경우 → μ „κ°œ ꡬ문을 μ‚¬μš©ν•΄ λ§€κ°œλ³€μˆ˜ λ§Œλ“¦ → 'λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜' 라고 함
function addNum(a, b){
	return a + b;
}

addNum(1, 3);		// 4
addNum(1, 3, 5, 7);	// 4
  • addNum(1, 3, 5, 7): μ•žμ—μ„œ 2개의 인수만 μ‚¬μš©ν•˜κ³  λ‚˜λ¨Έμ§€ μΈμˆ˜λŠ” 버림
function addNum(...numbers){
	let sum = 0;
    
    for(let number of numbers)
    	sum += number;
    
    return sum;
}

console.log(addNum(1, 3));		// 4
console.log(addNum(1, 3, 5, 7));	// 16
  • μ „κ°œ ꡬ문을 μ‚¬μš©ν•΄ λ§€κ°œλ³€μˆ˜λ₯Ό ν•˜λ‚˜μ˜ μ΄λ¦„μœΌλ‘œ μ„ μ–Έ
    μ΄λ ‡κ²Œ ν•˜λ©΄ λ§€κ°œλ³€μˆ˜λ‘œ λ„˜μ–΄μ˜¨ 값을 λͺ¨λ‘ νŽΌμ³μ„œ μ‚¬μš©ν•˜κ²Œ 됨

 

// 인수의 μΌλΆ€λΆ„λ§Œ λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λ‘œ λ°›κΈ°
function displayFavorites(first, ...fav){
	let str = `κ°€μž₯ μ’‹μ•„ν•˜λŠ” 과일은 "${first}"κ΅°μš”`;
    return str;
}
console.log(displayFavorites("사과", "포도", "λ°”λ‚˜λ‚˜"));

 

 

04-5. μ‹œκ°„μ„ κ³ λ €ν•˜λŠ” 타이머 ν•¨μˆ˜

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—λŠ” νŠΉμ • μ‹œκ°„μ΄ λ˜μ—ˆμ„ λ•Œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ±°λ‚˜ νŠΉμ • μ‹œκ°„ λ™μ•ˆ ν•¨μˆ˜λ₯Ό λ°˜λ³΅ν•˜κΈ° μœ„ν•΄ μ‹œκ°„μ„ μž¬λŠ” ν•¨μˆ˜κ°€ 있음 → 타이머 ν•¨μˆ˜
  • 타이머 ν•¨μˆ˜: μ‹€ν–‰ν•  ν•¨μˆ˜μ™€ μ‹œκ°„μ„ μ§€μ •ν•˜λŠ” ν•¨μˆ˜
    → 타이머 ν•¨μˆ˜μ— μ‹€ν–‰ν•  ν•¨μˆ˜λ₯Ό 인수둜 λ°›κΈ° λ•Œλ¬Έμ— 콜백 ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ μ‚¬μš©ν•¨

 

일정 μ‹œκ°„λ§ˆλ‹€ λ°˜λ³΅ν•˜κΈ° - setInterval()

  • setInterval() : μΌμ •ν•œ μ‹œκ°„λ§ˆλ‹€ ν•¨μˆ˜λ₯Ό λ°˜λ³΅ν•΄μ„œ μ‹€ν–‰ν•˜λŠ” ν•¨μˆ˜ (μ‹œκ°„μ€ λ°€λ¦¬μ΄ˆ λ‹¨μœ„ μ‚¬μš©)
  • ν•œ 번 μ‹€ν–‰ν•˜λ©΄ μ›Ή λΈŒλΌμš°μ €λ₯Ό μ’…λ£Œν•˜κΈ° μ „κΉŒμ§€λŠ” λ¬Έμ„œλ₯Ό μƒˆλ‘œκ³ μΉ¨ ν•˜κ±°λ‚˜ λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œ 이동해도 계속 싀행됨
setInterval(콜백 ν•¨μˆ˜, μ‹œκ°„)

 

function greeting(){
	console.log("μ•ˆλ…•ν•˜μ„Έμš”?");
}
setInterval(greeting, 2000);	// 2μ΄ˆλ§ˆλ‹€ greeting() ν•¨μˆ˜ 호좜

// ↓

setInterval(() => {
	console.log("μ•ˆλ…•ν•˜μ„Έμš”?")
}, 2000);

 

반볡 μ‹€ν–‰ λ©ˆμΆ”κΈ° - clearInterval()

  • ν•¨μˆ˜λ₯Ό 계속 λ°˜λ³΅ν•˜λŠ” 것이 μ•„λ‹ˆλΌ νŠΉμ • 쑰건이 λ˜μ—ˆμ„ 경우 반볡 싀행을 λ©ˆμΆ”λ €λ©΄ setInterval() ν•¨μˆ˜μ™€ ν•¨κ»˜ clearInterval() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό 함
  • clearInterval() : μ‹œμž‘ν•œ 타이머λ₯Ό μ’…λ£Œν•˜λŠ” ν•¨μˆ˜
clearInterval(타이머)

 

let counter = 0;

let timer = setInterval(() => {	// 타이머 μ‹œμž‘
	console.log("μ•ˆλ…•ν•˜μ„Έμš”?");
    counter++;	// 인사말 ν‘œμ‹œ νšŸμˆ˜κ°€ 1 증가
    if(counter === 5)
    	clearInterval(tiemr);	// counter = 5이면 타이머λ₯Ό μ’…λ£Œ
}, 2000);

 

νŠΉμ • μ‹œκ°„ 이후에 μ‹€ν–‰ν•˜κΈ° - setTimerout()

  • setInterval() ν•¨μˆ˜λŠ” μΌμ •ν•œ μ‹œκ°„λ§ˆλ‹€ 콜백 ν•¨μˆ˜λ₯Ό λ°˜λ³΅ν•˜μ§€λ§Œ, setTimerout() ν•¨μˆ˜λŠ” μ§€μ •ν•œ μ‹œκ°„μ΄ μ§€λ‚œ ν›„ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰
setTimerout(콜백 ν•¨μˆ˜, μ‹œκ°„)

 

setTimeout(() => {
	console.log("μ•ˆλ…•ν•˜μ„Έμš”?")
}, 3000);	// 3초 ν›„ 인사말 ν‘œμ‹œλ¨

 

 

 

 

ꡐ재: Do it! λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ ν”„λ‘œκ·Έλž˜λ°μ˜ 정석