コールバックに指定したアロー形式の関数を普通?の関数に書き直してみる

Angularのチュートリアルで、このようなコードがあります:

getHero(id: number): Promise<Hero> {
    return this.getHeroes().then( heroes => heroes.find( hero => hero.id === id ));
}

findに指定しているコールバック関数は、書き直すとこうなります:

(hero) => { return hero.id === id }

これを普通の関数に書き直すとこうなります:

findHero(id: number, hero: Hero, index: number, array: Hero[]): boolean {
    if(hero.id === id){
        return true;
    }else{
        return false;
    }
}
getHero(id: number): Promise<Hero> {
    return this.getHeroes().then( this.findHero.bind(this, id) ); // bindの1つ目の引数はnullでもOK
}

ここで疑問に思ったのが、通常の関数は引数が4つあるのにアロー形式の場合は1つで済む点です。 findはコールバック関数にelement,index,そしてarrayの3つを渡すのに、 アロー形式の場合はなぜ引数が1つで済むのか?

developer.mozilla.org

こたえは簡単でした。findが渡す3つのうちelementは必須ですがindexarrayはオプションなんですね:

JavaScript Array find() Method

よって、普通の関数の場合もこう書けます:

findHero(id: number, hero: Hero): boolean {
    if(hero.id === id){
        return true;
    }else{
        return false;
    }
}