I've started on the ZX Spectrum too, as I recall the built-in BASIC had GO SUB and RETURN statements so you could do subroutines.
It even had FOR loops.
Allowing only a single letter for string variable names was a pain though ;)
Timex Basic featured on the "clones" they produced is said to be a
a superset of Sinclair basic, in which case then Timex Basic
has the same features.
I am not 100% when it comes to the ZX81.
I did most of my programming on the ZX Spectrum.
I wrote a database engine and front end on it.
(There really was no backend and frontend it was all just one program.
But the engine was versatile and easy to build a new front end on top of.
I tried selling it for a while without luck. (Which was probably a good thing).
Looking back on it now its embarrassing.
I had no real idea what a database was, or how to functioned inside.
But given my age and tools available it was ok-
weird clone. ZX Basic had for loops. I know very well because I wrote a program to help me to memorice multiplication tables on a ZX Spectrum when I was a kid .
It was harder to structure the code because there were no functions and subroutines, just line numbers and goto.
No while, no fors. Just ifs.
When I've learned x86 assembly later, it didn't seem too different to me.
This variant of Basic is more close to Pascal for me than the Basic I've learned.