-
JavaScript์์ ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด์ด๊ธฐ์ ๋ณ์๋ฅผ ํ ๋นํ ์ ์์
-
ํจ์ ํํ์์ ํ ๋น ์ ์ ์ฌ์ฉํ ์ ์์
-
square(7); -> Reference Error
const square = function(num) { // ๋ณ์ square์ ํจ์๋ฅผ ํ ๋นํ๋ ํจ์ ํํ์ return num * num; }; // ๋ณ์ square์๋ ํจ์๊ฐ ํ ๋น๋์ด ์์ผ๋ฏ๋ก ์ผ๊ธ๊ฐ์ฒด, ํจ์ ํธ์ถ ์ฐ์ฐ์ () ์ฌ์ฉ ๊ฐ๋ฅ output = square(7);
-
ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด์ ํน์ง์ ๊ฐ์ง๊ธฐ์ ์๋์ฒ๋ผ ๊ฐ์ฒด ์์ฑ์ ๊ฐ์ผ๋ก ํ ๋น๋ ์ ์์
const cat = { name: 'nabi', age: 3, cry: fuction(){ console.log('miaow..') } }
-
์ ์: ํจ์๋ฅผ ์ ๋ฌ์ธ์(argument)๋ก ๋ฐ์ ์ ์๊ณ , ํจ์๋ฅผ returnํ ์ ์๋ ํจ์
-
๋ค๋ฅธ ํจ์(caller)์ ์ ๋ฌ์ธ์๋ก ์ ๋ฌ๋๋ ํจ์๋ฅผ ์ฝ๋ฐฑ ํจ์ (callback function)๋ผ๊ณ ํจ
-
์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌ๋ฐ์ ๊ณ ์ฐจํจ์(caller)๋ ํจ์ ๋ด๋ถ์์ ์ด ์ฝ๋ฐฑํจ์๋ฅผ ํธ์ถ(invoke)ํ ์ ์๊ณ , ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฝ๋ฐฑํจ์์ ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์๋ ์์
-
ํจ์๋ฅผ ๋ฆฌํดํ๋ ํจ์๋ ์ปค๋งํจ์ ๋ผ๊ณ ํ๋ฉฐ, ์ด ์ฉ์ด๋ฅผ ์ฌ์ฉํ ๋๋ 'ํจ์๋ฅผ ์ ๋ฌ์ธ์๋ก ๋ฐ๋ ํจ์'์๋ง ํ์ ํด ์ฌ์ฉํ๊ธฐ๋ ํจ. ์ฆ, ๊ณ ์ฐจํจ์๊ฐ ์ปค๋งํจ์๋ฅผ ํฌํจํ๋ ๊ฒฉ.
-
์ ๋ฆฌํ์๋ฉด, 'ํจ์๋ฅผ ๋ฆฌํดํ๋ ํจ์'์ 'ํจ์๋ฅผ ์ ๋ฌ์ธ์๋ก ๋ฐ๋ ํจ์' ๋ชจ๋ ๊ณ ์ฐจํจ์๋ก ์ฌ์ฉ
a. ๋ค๋ฅธ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๋ ๊ฒฝ์ฐ
function double(num) { return num * 2; } function doubleNum(func, num) { return func(num); } // ํจ์ doubleNum์ ๋ค๋ฅธ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๋ ๊ณ ์ฐจํจ์ // ํจ์ doubleNum์ ์ฒซ ๋ฒ์งธ ์ธ์ func์ ํจ์๊ฐ ๋ค์ด์ฌ ๊ฒฝ์ฐ, ํจ์ func์ ํจ์ doubleNum์ ์ฝ๋ฐฑํจ์ // ์๋์ ๊ฐ์ ๊ฒฝ์ฐ, ํจ์ double์ ํจ์ doubleNum์ ์ฝ๋ฐฑํจ์ let output = doubleNum(double, 4); console.log(output); // 8
b. ํจ์๋ฅผ ๋ฆฌํดํ๋ ๊ฒฝ์ฐ
function adder(added) { // ํจ์ adder๋ return fuction (num) { // ์ธ์ ํ ๊ฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ค๋ฅธ ํจ์(์ต๋ช ํจ์)๋ฅผ ๋ฆฌํดํ๋ ๊ณ ์ฐจํจ์ return num + added; // ๋ฆฌํด๋๋ ์ต๋ช ํจ์๋ ์ธ์ ํ ๊ฐ๋ฅผ ๋ฐ์ added์ ๋ํ ๊ฐ์ ๋ฆฌํด }; } // adder(5)๋ ํจ์์ด๋ฏ๋ก ํจ์ ํธ์ถ ์ฐ์ฐ์ () ์ฌ์ฉ ๊ฐ๋ฅ let output = adder(5)(3); // 8 console.log(output); // 8 // adder๊ฐ ๋ฆฌํดํ๋ ํจ์๋ฅผ ๋ณ์์ ์ ์ฅ ๊ฐ๋ฅ // javascript์์ ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ const add3 = adder(3); output = add3(2); console.log(output); // 5
c. ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ณ , ํจ์๋ฅผ ๋ฆฌํดํ๋ ๊ฒฝ์ฐ
function double(num) { return num * 2 } // ํจ์ doubleAdder๋ ๊ณ ์ฐจํจ์ // ํจ์ doubleAdder์ ์ธ์ func๋ ํจ์ doubleAdder์ ์ฝ๋ฐฑํจ์ // ํจ์ double์ ํจ์ doubleAdder์ ์ฝ๋ฐฑ์ผ๋ก ์ ๋ฌ๋จ function doubleAdder(added, func) { const doubled = func(added); return function(num) { return num + doubled; }; } // doubleAdder(5, double)๋ ํจ์์ด๋ฏ๋ก ํจ์ ํธ์ถ ๊ธฐํธ () ์ฌ์ฉ ๊ฐ๋ฅ doubleAdder(5, double)(3); // 13 // doubleAdder๊ฐ ๋ฆฌํดํ๋ ํจ์๋ฅผ ๋ณ์์ ์ ์ฅ ๊ฐ๋ฅ (์ผ๊ธ ๊ฐ์ฒด) const addTwice3 = doubleAdder(3, double); addTwice(2); // 8
-
JavaScript์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋ ๊ณ ์ฐจํจ์๊ฐ ์ฌ๋ฌ ๊ฐ ์๋๋ฐ, ๊ทธ ์ค ๋ฐฐ์ด ๋ฉ์๋๋ค ์ค ์ผ๋ถ๊ฐ ๋ํ์ ์ธ ๊ณ ์ฐจํจ์์ ํด๋น๋จ.
-
๋ฐฐ์ด์ filter ๋ฉ์๋๋ ๋ชจ๋ ๋ฐฐ์ด์ ์์ ์ค ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๋ฅผ '๊ฑธ๋ฌ๋ด๋' ๋ฉ์๋
let arr = [1, 2, 3, 4]; let output = arr.filter(์ง์); console.log(output); // [2, 4] arr = ['hello', 'front', 'end', 'happy', 'coding']; output = arr.filter(๊ธธ์ด 5 ์ดํ) // *syntax error : ์ด ์ฝ๋๋ ์๋ฏธ๋ง ์ดํดํ๊ธฐ console.log(output); // 'hello', 'front', 'end' 'happy'
-
์ฌ๊ธฐ์ ๊ฑธ๋ฌ๋ด๋ ๊ธฐ์ค์ด ๋๋ ํน์ ์กฐ๊ฑด์ filter ๋ฉ์๋์ ์ ๋ฌ์ธ์๋ก ์ ๋ฌ๋๋ฉฐ, ํํ๋ ํจ์ ํํ์.
-
๋ฐ๋ผ์ filter ๋ฉ์๋๋ ๊ฑธ๋ฌ๋ด๊ธฐ ์ํ ์กฐ๊ฑด์ ๋ช ์ํ ํจ์๋ฅผ ์ ๋ฌ์ธ์๋ก ๋ฐ๊ธฐ์ ๊ณ ์ฐจํจ์.
// ํจ์ ํํ์ const isEven = function (num) { return num % 2 === 0; }; let arr = [1, 2, 3, 4]; // let output = arr.filter(์ง์); // ์ง์๋ฅผ ํ๋ณํ๋ ํจ์๊ฐ ์กฐ๊ฑด์ผ๋ก์ filter ๋ฉ์๋์ ์ ๋ฌ์ธ์๋ก ์ ๋ฌ๋จ let output = arr.filter(isEven); console.log(output); // [2, 4] const isLteFive = function (str) { // Lte = less than equal return str.length <= 5; }; arr = ['hello', 'front', 'end', 'happy', 'coding']; // output = arr.filter(๊ธธ์ด 5 ์ดํ) // ๊ธธ์ด 5 ์ดํ๋ฅผ ํ๋ณํ๋ ํจ์๊ฐ ์กฐ๊ฑด์ผ๋ก์ filter ๋ฉ์๋์ ์ ๋ฌ์ธ์๋ก ์ ๋ฌ๋จ let output = arr.filter(isLteFive); console.log(output); // 'hello', 'front', 'end' 'happy'
-
filter ํ์ฉ ์ ์๋ ๊ณผ์ ์ ๊ธฐ์ตํ ๊ฒ
- ๋ฐฐ์ด์ ๊ฐ ์์๊ฐ
- ํน์ ๋ ผ๋ฆฌ (ํจ์)์ ๋ฐ๋ฅด๋ฉด, ์ฌ์ค(true)์ผ ๋
- ๋ฐ๋ก ๋ถ๋ฅํ๋ค (filter)