📄️ 関数宣言
関数宣言はJavaScriptで関数を定義する構文です。
📄️ 関数式
関数式はJavaScriptで関数を作る方法のひとつで、function式を用います。
📄️ アロー関数
アロー関数(arrow function)はJavaScriptの関数を作る方法のひとつです。
📄️ 関数の型の宣言
TypeScriptでは、関数の型を宣言できます。関数の型の宣言とは、関数の実装を示さずに、関数のインターフェースを定義することです。
📄️ 関数宣言と巻き上げ
JavaScriptの関数宣言と関数式の違いが現れるひとつの例は巻き上げ(hoisting)です。関数宣言には巻き上げがあり、関数式には巻き上げがありません。
📄️ 従来の関数とアロー関数の違い
JavaScriptの関数は、[関数宣言]、[関数式]、[アロー関数]の3通りの方法で作れます。
📄️ 関数は値
他の言語では関数は特別な立ち位置のことがあります。ある言語では、同じ名前の変数を定義してもエラーにならないのに対し、同じ名前の関数定義はエラーになります。またある言語では、関数を変数に代入できなかったりします。
📄️ 関数はオブジェクト
JavaScriptの関数はオブジェクトです。したがって、関数にプロパティを持たせることができます。
📄️ 戻り値がない関数とvoid型
TypeScriptで戻り値がない関数の戻り値を型注釈するにはvoid型を用います。void型は関数の戻り値を型注釈するためにある特別な型です。
📄️ 関数の引数
引数の個数
📄️ 値渡しと参照渡し
プログラミング言語によっては、引数の渡し方に値渡し(pass-by-value)と参照渡し(pass-by-reference)の2種類が存在するものがあります。
📄️ オプション引数
オプション引数(optional parameter)は、渡す引数を省略できるようにするTypeScript固有の機能です。オプション引数は疑問符?を引数名の後ろに書くことで表現します。
📄️ デフォルト引数
引数の値がundefinedのとき、代わりの値を指定できるのがデフォルト引数(default parameter)です。
📄️ 残余引数/可変長引数
通常の関数は引数の数が決まっています。JavaScriptでは引数の数に決まりがない関数も作れます。引数の個数が決まっていない引数のことを可変長引数(variable length arguments, variadic arguments)といいます。JavaScriptでは可変長引数は残余引数(rest parameter)と呼びます。
📄️ this引数
アロー関数以外の関数とクラスのメソッドの第1引数はthisという特殊な引数を受けることができます。これは使用するコンテキストによってthisの意味するところが変わってしまうため、これらがどのコンテキストで使用されるべきなのかをTypeScriptに伝えるために使います。このthisは呼び出す側は意識する必要はありません。第2引数以降を指定してください。
📄️ 分割代入引数
JavaScriptでは分割代入構文は関数の引数でも使えます。引数がオブジェクトや配列の場合、そのオブジェクトや配列の一部だけを関数で利用したい場合に、分割代入引数が便利です。
📄️ キーワード引数とOptions Objectパターン
JavaScriptやTypeScriptの関数には、Pythonにあるキーワード引数のような機能はありません。その代わり、分割代入引数を応用することで、キーワード引数と同じようなことができます。
📄️ 型ガード関数
型ガードを使用することによってifのブロックで特定の型に絞りこむことができます。
📄️ アサーション関数
ユーザー定義の型ガード関数として使われるのはType predicateが主ですが、Assertion functionという方法もあります。
📄️ 即時実行関数式(IIFE)
IIFE (Immediately Invoked Function Expression; 即時実行関数式) とは定義と同時に実行される関数です。
📄️ コールバック関数
コールバック関数とは、関数の引数として渡される関数です。関数の中で引数で指定した関数を呼び出す(コールバックする)ことで関数の振る舞いを制御したり、非同期な結果を受け取ることができます。
📄️ オーバーロード関数
オーバーロード関数(overload function)は、TypeScriptの機能で、ひとつの関数に異なる関数シグネチャを複数もつ関数です。関数シグネチャとは、どのような引数を取るか、どのような戻り値を返すかといった関数の型のことです。要するに、異なる引数や戻り値のパターンがいくつかある関数をオーバーロード関数と言います。