JavaScript Primer 関数と宣言
読書メモ
何も返さない場合, undifined
返す.
呼び出し時の引数が少ないとき → 余った仮引数に undifined
が代入される
呼び出し時の引数が多いとき → あふれた引数は単純に無視される
argumentsという特殊な変数を利用
jsfunction fn(...args) {
// argsは引数の値が順番に入った配列
console.log(args); // => ["a", "b", "c"]
}
fn("a", "b", "c");
jsfunction 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で記述する.
引数として渡される関数のこと
非同期処理でよく使われる
コールバック関数を引数として使う関数やメソッド
関数を返す関数
jsfunction 高階関数(コールバック関数) {
コールバック関数();
}
js# 高階関数 forEachの例
const array = [1, 2, 3];
array.forEach((value) => {
console.log(value);
});