I would recommend the last option: “go ahead build something”, but don’t stop learning. You will learn the most when you actually try to create something useful.
Pick something that bothers you. Something where you ever thought there should be a better solution. Make it open source and talk about it in the communities (here for example).
You have different options, though:
Pick some framework, you know or find interesting, that has some bugs or missing functionality. Clone it and fix those bugs (or add the functions), make a pull request. The original author will generally guide and help you (teach you the oo/functional style they use). Don’t be upset when the author isn’t very cooperative, though. Many people do that as their hobby and don’t have the time to instantly handle pull request and such. But there are great examples on the other hand, I recently contributed to nvd3 (https://github.com/novus/nvd3/pull/1271) and they were extremely nice.
Make some package to enrich the community and make it open source on GitHub. Promote it (here, and elsewhere) and if others find it worthwhile they might dig into your code and give you feedback (you will get the tickets and pull requests).
Create a real product and promote it, similar to how they did it: Join Huqoo - a meteor project. You will get feedback about what others think about your app, but not on the code level.
For feedback on code level you have to make it open source, like Telescope.