generated at
JavaScript Primer 関数と宣言

読書メモ
何も返さない場合, undifined 返す.

呼び出し時の引数が少ないとき → 余った仮引数に undifined が代入される
呼び出し時の引数が多いとき → あふれた引数は単純に無視される

argumentsという特殊な変数を利用
Rest parameters ... つけた仮引数
js
function fn(...args) { // argsは引数の値が順番に入った配列 console.log(args); // => ["a", "b", "c"] } fn("a", "b", "c");

js
function fn(x, y, z) { console.log(x); // => 1 console.log(y); // => 2 console.log(z); // => 3 } const array = [1, 2, 3]; // Spread構文で配列を引数に展開して関数を呼び出す fn(...array); // 次のように書いたのと同じ意味 fn(array[0], array[1], array[2]);

関数に渡された引数の値がすべて入ったArray-likeなオブジェクト
使う理由はない
Arrayのメソッドは利用できない
関数が可変長引数を受けつけるのかを仮引数だけを見て判断できなくなる

js
// 第1引数のオブジェクトから`id`プロパティを変数`id`として定義する function printUserId({ id }) { console.log(id); // => 42 } const user = { id: 42 }; printUserId(user);

関数はオブジェクト
ファーストクラスファンクション: 関数が値として扱える(第一級関数
関数式: 関数を値として変数へ代入している式
functionキーワードの右辺に書く関数名は省略可能
匿名関数または 無名関数となる: 名前を持たない関数
js
// 関数式 const 関数名 = function() { // 関数を呼び出したときの処理 // ... return 関数の返り値; };

関数名をしない記法 → 再帰関数に利用される
js
// factorialは関数の外から呼び出せる名前 // innerFactは関数の外から呼び出せない名前 const factorial = function innerFact(n) { if (n === 0) { return 1; } // innerFactを再帰的に呼び出している return n * innerFact(n - 1); }; console.log(factorial(3)); // => 6

名前をつけることができない
thisが静的に決定できる
arguments変数を参照できない
人による解釈や実装の違いが生まれにくくなる
newできない
できるだけArrow Functionで記述する.

引数として渡される関数のこと
非同期処理でよく使われる
コールバック関数を引数として使う関数やメソッド
関数を返す関数
js
function 高階関数(コールバック関数) { コールバック関数(); }

js
# 高階関数 forEachの例 const array = [1, 2, 3]; array.forEach((value) => { console.log(value); });

メソッド: オブジェクトのプロパティである関数