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

[D+19] κ³ μ°¨ν•¨μˆ˜

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2020. 9. 25.

 

 

D+19

-  κ³ μ°¨ν•¨μˆ˜ -

(μΌκΈ‰κ°μ²΄μ˜ νŠΉμ§•, κ³ μ°¨ν•¨μˆ˜, κ³ μ°¨ν•¨μˆ˜μ˜ μ’…λ₯˜)

 


 

 

일급객체

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ νŠΉλ³„ν•œ λŒ€μš°λ₯Ό λ°›λŠ” λ…€μ„μœΌλ‘œ

μΌκΈ‰κ°μ²΄μ—μ„œ μš”κ΅¬ν•˜λŠ” 3가지 쑰건을 μΆ©μ‘±ν–ˆμ„μ‹œμ— 일급객체라고 말할 수 μžˆλ‹€.

 

 

1 ) λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλ‹€.

const sum = function (num) {
	return num + num;
};

output = sum(5);
console.log(output); // 10

μš°λ¦¬λŠ” ν•¨μˆ˜ν‘œν˜„μ‹μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ„ μ–Έν–ˆμ„λ•Œ λ³€μˆ˜μ— ν•¨μˆ˜λ₯Ό μ €μž₯ν•  수 μžˆλ‹€λŠ” 것을 μ–΄λŠμ •λ„ μ•Œκ³ μžˆλ‹€.

 

이처럼 ν•¨μˆ˜λŠ” λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ” 것은 λ‹€λ₯Έν•¨μˆ˜μ˜ 인자둜 μ „λ‹¬λ˜κ±°λ‚˜ μ½”λ“œμ˜ μœ„μΉ˜κ°€ μ–΄λŠ 정도 예츑이 κ°€λŠ₯ν•˜λ‹€.

 

 

2 ) λ‹€λ₯Έν•¨μˆ˜μ˜ 인자둜 전달될 수 μžˆλ‹€.

function showText(e) {
	//show text
}

$('from').on('click', showText);

반볡적인 뢀뢄을 κ°œμ„ ν•˜κ³  μ‹Άμ„λ•Œ 주둜 μ‚¬μš©ν•˜λ©°

ν•΄λ‹Ήμš”μ†Œμ™€ μƒν˜Έμž‘μš©μ‹œμ— ν•¨μˆ˜λ₯Ό 전달받아 ν•¨μˆ˜κ°€ 싀행될 수 μžˆμ–΄ νŽΈλ¦¬ν•˜λ‹€.

 

 

3 ) λ‹€λ₯Έ ν•¨μˆ˜μ˜ κ²°κ³Όλ‘œμ„œ 리턴될 수 μžˆλ‹€.

νŠΉμ •ν•œ 값이 λ¦¬ν„΄λ˜λŠ” 것이 μ•„λ‹Œ ν•¨μˆ˜κ°€ 리턴이 될 수 μžˆλ‹€.

 

 


κ³ μ°¨ν•¨μˆ˜

βˆ™ν•¨μˆ˜λ₯Ό 인자둜 λ°›κ±°λ‚˜ ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜

 

 

μ½œλ°±ν•¨μˆ˜ (callback function)

βˆ™λ‹€λ₯Έν•¨μˆ˜μ˜ 인자둜 μ „λ‹¬λ˜λŠ” ν•¨μˆ˜

 

 function double(num) { // ν•¨μˆ˜ double은 ν•¨μˆ˜ doubleNum의 μ½œλ°±ν•¨μˆ˜μ΄λ‹€.
  return num * 2;
}

// ν•¨μˆ˜ doubleNum은 λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό 인자둜 λ°›λŠ” κ³ μ°¨ν•¨μˆ˜μ΄λ‹€.
function doubleNum(func, num) {  // funcλŠ” doubleNum의 μ½œλ°±ν•¨μˆ˜μ΄λ‹€.
  let doubledArr = [];
  return func(num); // 8
}

 

 


κ³ μ°¨ν•¨μˆ˜μ˜ μ’…λ₯˜

 

 

Array.prototype.forEach( )

주어진 ν•¨μˆ˜λ₯Ό λ°°μ—΄ μš”μ†Œ 각각에 λŒ€ν•΄ μ‹€ν–‰ν•œλ‹€.

let arr = ['a', 1, 'c'];

let result = [];

arr.forEach(function (el) {
	if(typeof el === 'number') { // λ§Œμ•½ arr의 μš”μ†Œμ˜ νƒ€μž…μ΄ λ„˜λ²„λΌλ©΄
    return result.push(el); //resultλΌλŠ” 배열에 ν‘Έμ‹œν•΄μ€˜
    }
return result; // [1]
});

 

Array.prototype.filter( )

주어진 ν•¨μˆ˜μ˜ ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ” λͺ¨λ“  μš”μ†Œλ₯Ό λͺ¨μ•„ μƒˆλ‘œμš΄ λ°°μ—΄λ‘œ λ°˜ν™˜ν•œλ‹€.

let words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

words.filter(function(el) { // μš”μ†Œμ˜ 길이가 6μ΄ˆκ³ΌμΈκ²ƒμ— true인 κ²ƒλ“€λ§Œ λ‚˜μ™€λΌ
    return el.length > 6; // ["exuberant", "destruction", "present"]
});

 

Array.prototype.map( )

λ°°μ—΄ λ‚΄μ˜ λͺ¨λ“  μš”μ†Œ 각각을 주어진 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ κ²°κ³Όλ₯Ό λͺ¨μ•„ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•œλ‹€.

let arr = [1, 2, 3, 4, 5];

arr.map(function(el) {
    return el * 2; // 배열에 μžˆλŠ” 각 μš”μ†Œμ— 2μ”© κ³±ν•΄μ€˜ [2, 4, 6, 8, 10]
});

 

Array.prototype.reduce( )

ν•¨μˆ˜μ˜ 쑰건을 μ μš©μ‹œμΌœ λ°°μ—΄λ“€μ˜ μš”μ†Œλ“€μ„ ν•˜λ‚˜λ‘œ λ§Œλ“€μ–΄ 버린닀.

let arr = [1, 2, 3, 4, 5];

arr.reduce(function(pre, val) { // function(λˆ„μ κ°’, μž…λ ₯μ‹œν‚¬κ°’)
    return pre + val; // λ°°μ—΄μ˜ λͺ¨λ“  값듀을 λ‹€ λ”ν•΄μ„œ 리턴 μ‹œμΌœμ€˜ --> 15
}, 0);

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€