一級オブジェクト/高次関数/コールバック関数
4578 ワード
First-class object無名の文字で表現できます.() 変数または資料構造(オブジェクト、配列など)に割り当てることができます. パラメータとして関数のパラメータに渡すことができる. の他の関数の戻り値に戻ることができます. 関数と他のオブジェクトを区別する特徴は、呼び出すことができることです.
関数式
関数を変数に保存する方法
関数式は、割り当て前に使用できません.
戻り関数:「ライブラリ関数」 とも呼ばれる
パラメータとして関数を受け入れることができる関数:コールバック関数を持つ高次関数. 高次関数は、必要に応じてパラメータとして受信した関数を呼び出すか、モジュールを作成して返します.
高次関数は不変性向けの「関数式プログラミング」
「関数プログラミング」は、純粋な関数と補助関数の組み合わせであり、論理的な条件文と重複文を排除することで複雑さを解決し、変数の使用を減らし、副作用を回避するプログラミングモードである.
特にArrayオブジェクトは非常に有用な高次関数を提供する.
API
this(元の配列)の変更方法
.sort()ソート
配列内の要素を一時的に文字列に変換し、ソートします.
ソート順を定義する比較関数をメソッドのパラメータとして渡す
繰り返し.foreachはドアの代わりに使用できます. 配列を巡回し、各要素に対してパラメータとして与えられたコールバック関数を実行する. コールバック関数のパラメータによって伝達することができる. コールバック関数を使用して、ソースアレイ(this)を変更できます. forドアとは異なり、ドアを切ることはできません.
コールバック関数の戻り値(結果値)を使用して新しい配列を作成し、戻ります.
mapメソッドは、配列を巡回し、要素値を他の値にマッピングするための関数です.
.filter選択、分類、フィルタ
コールバック関数の実行結果trueの配列要素の値のみを抽出する新しい配列を返します. ifゲートは に代わることができる.フィルタ条件では、特定のエンクロージャのみを抽出して新しいアレイを作成するときに を使用する.
新しいシナリオを返しますか?
元のままのものを戻し直したいなら、変数に入れて変えるべきでしょう.
.reduceサムネイル、凝縮、累積
💡map、filterでできるのはreduce!
reduceを呼び出すと、常に初期値が渡され、より安全です.
パラメータとしての関数
配列方法を内蔵することで、配列を簡単に変更できます.
コールバック関数を使用する方法があります.
なぜコールバック関数を使うのですか?
->通常、配列をブラウズする際には、各アクションに特徴があります.
このフィルタリング動作は想像以上に難しく、文字列や数字で表すのは難しい.
そこで,自由度を高めるためにコールバック関数を用いる.
未実行関数と実行関数の違いは?
関数自体/関数の結果値
()の有無は、関数が実行されるかどうかを示します.
():コール
()銀箔だけ剥いている状態です>()()()ラインチョコを剥いたら開く!
일급객체
関数式
関数を変数に保存する方法
関数式は、割り当て前に使用できません.
square(7);
// --> ReferenceError: Can't find variable: square
const square = function (num) {
return num * num;
};
// square에 함수가 저장되어 있으므로(일급 객체), 함수 호출 연산자 '()'를 사용할 수 있습니다.
output = square(7);
console.log(output); // 49
「高次関数?」「ボス」戻り関数
パラメータとして
高次関数は不変性向けの「関数式プログラミング」
「関数プログラミング」は、純粋な関数と補助関数の組み合わせであり、論理的な条件文と重複文を排除することで複雑さを解決し、変数の使用を減らし、副作用を回避するプログラミングモードである.
特にArrayオブジェクトは非常に有用な高次関数を提供する.
API
this(元の配列)の変更方法
.sort()ソート
配列内の要素を一時的に文字列に変換し、ソートします.
const fruits = ['Banana', 'Orange', 'Apple'];
// ascending(오름차순)
fruits.sort();
console.log(fruits); // [ 'Apple', 'Banana', 'Orange' ]
// descending(내림차순)
fruits.reverse();
console.log(fruits); // [ 'Orange', 'Banana', 'Apple' ]
数字を並べ替えるとき?ソート順を定義する比較関数をメソッドのパラメータとして渡す
const points = [40, 100, 1, 5, 2, 25, 10];
// 숫자 배열 오름차순 정렬
// 비교 함수의 반환값이 0보다 작은 경우, a를 우선하여 정렬한다.
points.sort((a, b) => a - b);
console.log(points); // [ 1, 2, 5, 10, 25, 40, 100 ]
// 숫자 배열의 최소값 취득
console.log(points[0]); // 1
// 숫자 배열 내림차순 정렬
// 비교 함수의 반환값이 0보다 큰 경우, b를 우선하여 정렬한다.
points.sort((a, b) => b - a);
console.log(points); // [ 100, 40, 25, 10, 5, 2, 1 ]
// 숫자 배열의 최대값 취득
console.log(points[0]); // 100
this(元の配列)を変更しない方法繰り返し.foreach
const numbers = [1, 2, 3];
let pows = [];
// for 문으로 순회
for (let i = 0; i < numbers.length; i++) {
pows.push(numbers[i] ** 2);
}
// forEach 메소드로 순회
numbers.forEach(item => pows.push(item ** 2));
console.log(pows); // [ 1, 4, 9 ]
元のアレイを変更する方法const numbers = [1, 2, 3, 4];
// 원본 배열을 직접 변경하려면 콜백 함수의 3번째 인자(this)를 사용한다.
numbers.forEach(function (item, index, self) {
self[index] = Math.pow(item, 2);
});
console.log(numbers); // [ 1, 4, 9, 16 ]
.mapペアリングコールバック関数の戻り値(結果値)を使用して新しい配列を作成し、戻ります.
const numbers = [1, 4, 9];
// 배열을 순회하며 각 요소에 대하여 인자로 주어진 콜백함수를 실행
const roots = numbers.map(Math.sqrt);
// map 메소드는 새로운 배열을 반환한다
console.log(roots); // [ 1, 2, 3 ]
// map 메소드는 원본 배열은 변경하지 않는다
console.log(numbers); // [ 1, 4, 9 ]
forEachメソッドは、配列を巡回し、要素値を参照して操作するための関数です.mapメソッドは、配列を巡回し、要素値を他の値にマッピングするための関数です.
.filter選択、分類、フィルタ
コールバック関数の実行結果trueの配列要素の値のみを抽出する新しい配列を返します.
新しいシナリオを返しますか?
元のままのものを戻し直したいなら、変数に入れて変えるべきでしょう.
.reduceサムネイル、凝縮、累積
💡map、filterでできるのはreduce!
reduceを呼び出すと、常に初期値が渡され、より安全です.
const arr = [1, 2, 3, 4, 5];
/*
previousValue: 이전 콜백의 반환값
currentValue : 배열 요소의 값
currentIndex : 인덱스
array : 메소드를 호출한 배열, 즉 this
*/
// 합산
const sum = arr.reduce((previousValue, currentValue) =>
previousValue + currentValue; // 결과는 다음 콜백의 첫번째 인자로 전달된다
);
console.log(sum); // 15: 1~5까지의 합
// 최대값 취득
const max = arr.reduce((pre, cur) =>
pre > cur ? pre : cur;
);
console.log(max); // 5: 최대값
オブジェクトのプロパティ値をマージする場合は、初期値を渡す必要があります.const products = [
{ id: 1, price: 100 },
{ id: 2, price: 200 },
{ id: 3, price: 300 }
];
// 프로퍼티 값을 합산
const priceSum = products.reduce((pre, cur) =>
pre + cur.price;
, 0);
console.log(priceSum); // 600
コールバック関数「アルバイト」パラメータとしての関数
配列方法を内蔵することで、配列を簡単に変更できます.
コールバック関数を使用する方法があります.
なぜコールバック関数を使うのですか?
->通常、配列をブラウズする際には、各アクションに特徴があります.
このフィルタリング動作は想像以上に難しく、文字列や数字で表すのは難しい.
そこで,自由度を高めるためにコールバック関数を用いる.
未実行関数と実行関数の違いは?
関数自体/関数の結果値
()の有無は、関数が実行されるかどうかを示します.
():コール
function foo () {
return function () {
return 'a';
}
}
//foo ();
function foo () {
{
return 'a';
}
//foo ()();
'a'
Hershチョコレート三角形...()銀箔だけ剥いている状態です>()()()ラインチョコを剥いたら開く!
Reference
この問題について(一級オブジェクト/高次関数/コールバック関数), 我々は、より多くの情報をここで見つけました https://velog.io/@heartane/고차함수-콜백함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol