"Start with the fundamentals" has become a polarizing sentiment these days. Some say it's the right approach, while others think it's gatekeeping. I think it's the wrong starting point.
An old English teacher of mine used to keep a copy of James Joyce's Ulysses on his night stand. "For nights when I really can't get to sleep, a few pages of that will normally do the trick," he'd say.
This was true for me with Kyle Simpson's You don't know JS. Nothing like a few paragraphs on scopes and closures to put me right into a deep, deep sleep.
A false finish line
There's two reasons you should skip thinking about fundamentals as the most important part of the learning process.
First, there's an assumption in "start with the fundamentals" that there's a defined list. A canonical list, calling to you like a finish line. The reality is that there's no such list. There's more and more and more as you go. Endlessly more. The better you get with one piece of the puzzle, the more you'll realize how many pieces there are.
Second, there are actual language fundamentals that you'll need to know before you're able to do anything. Functions, arrays, objects, strings and more. But you'll never get the hang of them until you put them into practice. Learning to code is a series of climbing over hurdles. If you're not running into hurdles, you'll never learn. The absolute best way to find these hurdles is to build actual projects, not blindly follow tutorials and books that focus on fundamentals.
You need to stay awake to learn!
Optimize for motivation
You should optimize your learing for motivation. Optimize for that thing that itches at you day and night. That thing you can't stop thinking about. This level of motivation and drive is worth its weight in gold. It's this, not expert level knowledge of scopes and closures, that will propel you along as your motivation wanes.
On your learning path, the only question you should regularly ask yourself is:
"Am I motivated?"
All the rest will follow from that. Promise.