Recent javascript frameworks are great. They allow you to do many things simply. Such things are recent but so useful like two-way data-binding or REST resources. These concepts have become so essential that one could argue they could be part of the original language. This is what is suggested in Data-binding Revolutions with Object.observe().

After all, frameworks are nothing but temporary extensions of a language. Same goes for Spring in the Java ecosystem. For example, Spring Batch became so popular that a JSR was made to standardize batch functionality for Java. See JSR 352 and JSR 352 Spring Batch And You for more details.

The annoying thing about frameworks is that they take you, prisoner. It's often not possible to use multiple frameworks for the same part of a stack. This is why standardization is a good thing. It allows one to use a standard regardless of implementation. This is great for switching technologies.

One shouldn't avoid frameworks. Frameworks are great and the more people use a framework, the closer it gets towards standardization, the holy grail, the one-standard-to-rule-them-all kind of conquest. But sometimes, it's only the concept which is retained. This is what happened to Java 8. Closures existed already in many languages, even for the JVM. Such is the case for Scala and Groovy. Sure it was possible in Java with inner classes. Anonymous classes are a simple and widely used concept and now Java has a simpler notation for these.

Frameworks push languages forward. They are the beta testers of new functionalities. The ones who succeed become part of the language.