// 関数式では定義の前に呼び出しはできない
// 変数() // ReferenceError
// 関数式による関数を変数に代入
// 関数名を付けてはいるが、あまり意味がない
let 変数 = function 関数(引数1, 引数2) {
console.log(引数1 * 引数2)
}
// 呼び出しは変数名()
変数(2, 3) // 6
// 外部からは関数名ではアクセスできない
// 関数(2, 3) // ReferenceError
// 関数式の匿名関数
// 関数式での関数名は外部からはアクセスできない(ReferenceError)ため、
// 名前を省略することが多い。
let 匿名関数 = function(引数1, 引数2) {
console.log(引数1 * 引数2)
}
匿名関数(2, 3) // 6
関数式による関数は、特に匿名関数にして、実引数や戻り値として利用することが多い。
// 関数式は定義したそのまま実引数や戻り値にできる
function 関数宣言(引数) {
console.log(typeof 引数 === 'function')
// 戻り値が関数式による関数
return function() { /*本体*/ }
}
// 実引数が関数式による関数
let 戻り値 = 関数宣言(function() { /*本体*/ }) // true
console.log(typeof 戻り値 === 'function') // true
// なお、関数宣言による関数も、関数名や代入した変数をもって実引数や戻り値にできる
関数宣言(関数宣言) // true
let 変数 = 関数宣言
関数宣言(変数) // true