> There's no need to be rude.
I didn't intend to be rude (I'm sorry for any offense it might have caused). It was a general complaint not aimed at you or anyone else in particular.
> A newcomer who encounters the closure method, on the other hand, has to mentally reverse-engineer how it works and what its goal is if they haven't seen that pattern before, because closures are much more general than classes and because returning a closure is less common and its behavior less obvious compared to other ways closures tend to be used in JS.
The second part here is simply not the case. If you want to use any bundler or build tool created in the past 15 years, it's going to use closures for anything but the most recent projects. CommonJS which is still ubiquitous in NodeJS is literally closures. When it was created, it literally wrapped your file in a function that passed in some variables like global or import then called eval on the module it had now created.
Before CommonJS, there was AMD (asynchronous module definition). Before that, libraries would wrap themselves in an IIFE which returned only the public parts of the library.
If someone doesn't know how the module pattern works, they are a junior JS dev and absolutely cannot move on with their career until they understand. At that point, there should be zero issues with them using the pattern.
> It's a tired trope that every single feature associated with Java or C# is "just there to make Java and C# programmers feel comfortable" and is therefore invalid and useless.
When you look into the people pushing for these features, you almost always find a Java or C# developer. There's not a mass push by JS devs to add these features. In the case of private variables, it seemed to be more-or-less the JS community vs the spec committee and the committee just ignored what most devs wanted (without any evidence) because they thought they knew best.
> The only footgun I've encountered with the ES class syntax is when passing classInstance.someMethod as a value (`this` is normally unbound because the method exists on the prototype instead of the instance).
This is too big of a topic for here, but there are many pieces of weirdness in the JS prototypal system. Classes don't fix them, they just add another layer of abstraction with its own rules (eg, methods aren't enumerable). There are lots of footguns and other people run into them even if you and your particular set of devs do not.