関数 - JavaScript
JavaScriptでの関数について、知ったこと
- 可変長引数
- ファーストクラスファンクション
- アロー関数
- コールバック関数と高級関数
可変長引数
function sum(...numbers) { let total = 0; for (item of numbers) { total += item; } return total; } console.log(sum(1, 2, 3, 4, 5));
可変長引数で定義することで引数の数を渡す側に決めてもらうことができる。
Rest Parameters
という機能を使う。
...仮引数
とすることで可変長引数になる
配列のように扱える。というか配列かな?pushできたし。
ファーストクラスファンクション
// 関数も値として扱える const print = function(str) { console.log(str); } // 普通に使える print('hello!');
関数も値(オブジェクト)として扱うことができるという意味。
オブジェクトとして扱えると何が良いかというと
「変数、配列の要素、関数への引数に関数を使うことができる」
function()
のように関数名を省略することができる。再帰呼び出しを行うときには関数名をつけることがある
アロー関数
// 以下の3つは同じ let print2 = (str) => { console.log(str); } print2 = str => { console.log(str); } print2 = str => console.log(str); print2('hello!');
無名関数を短く記述することができる機能
以下の条件のときには、更に省略して書くこともできる。
条件 | 省略できる箇所 |
---|---|
仮引数が1つ | (仮引数) の() を省略できる |
関数内の処理が1行 | {} とreturn を省略できる |
また、this
の参照先が一意に決まる!(よくわからない)
コールバック関数
const arr = [1, 'aaa', true]; arr.forEach((item) => { console.log(item); }); // お風呂に入ってから、ご飯を食べる const goingHome = (func) => { console.log('ただいまー'); console.log('お風呂に入ってきれいになったよ!'); func(); }; goingHome(() => { console.log('ご飯食べる'); });
関数に対して、関数を渡すことができる。これはファーストクラスファンクションのおかげ。
function 高級関数(コールバック関数) { ... コールバック関数(); // 呼び出す ... }
渡される側の関数を高級関数
、渡す関数をコールバック関数
と呼ぶ。
コールバック関数は高級関数を呼び出すときに定義することが多いらしい。
非同期で処理をしたいときに使う?