An old grad school connection of mine wrote a formal semantics for ES5 and couldn't explain what "with" did in words.
This is JavaScript, so there are probably tons of weird edge cases, but basically, within a with (expr) { … } block, everything defined on expr is put in scope:
with (Math) with (console) log(PI)
It reminds me a bit of Clojure's doto.Or java’s static import
And me around 20 years - also never even heard of the `with` statement! I think to qualify as a footgun, people actually need to be using it in the real world.
Re:Git's list of banned C functions
by IgorPartola on Thursday March 04, 2021 @07:05PM
(#26350369)
I have seen it in the wild. I first learned of it from Douglas Crockford’s JavaScript the good parts. He also had some things to say about the new keyword and prototype inheritance and how we should stop using them. Ironically while he was dismissed on that suggestion then, VueJS has pretty much implemented exactly what he has in mind in their V3.
It should be called something like appendixgun then because you don't use it but it still has a chance of causing needless suffering and pain.
The appendix is a reservoir of gut bacteria in case you lose yours in an infection or by taking too many antibiotics.
There are lots of more conventional footguns in JS, though - everything about the Date object/class, for example.
I've been coding in JS on a daily basis for more than 10 years and today I learned there is a `with` statement in JS.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
Edit: well, seems like it's been deprecated/forbidden since ES5 (2009), so it makes sense I've never seen it.