The 19-year-old forward, handed his first senior start by boss Carlo Ancelotti in the Merseyside derby at Goodison Park in June, has made 11 Premier League appearances.
Gordon told evertontv: “I’m delighted to sign and it is a big reward for my hard work.
“The contract shows the club’s faith in me and how much confidence they have in me and that is going to come out in my performances on the pitch.
“Everton is looking like it is on the up. We are coming together as players, staff and fans.”
Gordon became Everton’s sixth-youngest player when he made his debut as a substitute in the Europa League against Apollon Limassol in 2017, aged 16 years and 286 days.
He made his full debut against Liverpool in Everton’s first game back in June after the season had been suspended, but has yet to score his first senior goal.
Everton defender Michael Keane signed a new five-year contract on Sunday, while Mason Holgate and Dominic Calvert-Lewin also agreed five-year contracts earlier this year.