I don't think it's complex at all. The scoping rules are very simple. Block scoping just added another piece.
The difficulty is that there are many simple things like this to learn and to combine in a safe and maintainable manner for anything other than trivial programs. Out of the box, the language does nothing to discourage bad coding practices (some might say it even encourages them). It's the flip-side of being such an accessible language.
It is possible write JS in a way that avoids a lot of the complexity, but it requires experience and discipline and some tooling, just to be sure. The code will look simple but it is not an easy thing to do.