What's the difference between named functions and arrow functions in JavaScript?
16 comments
·June 30, 2025JoeOfTexas
moritzwarhier
The article misses even more nuance, independent from classes.
If you define
const o = { a: "Hello", b() { return this.a;} }
then o.a()
will return "Hello"while
const b = a.b;
b();
will throw an error.This predates generator functions and classes (which are only syntax sugar AFAIK).
And it seems like a glaring omission giving the submission title.
I'm ashamed though if it's in there and I missed it.
The behavior is called "late binding".
postalrat
Of course it's an error. 'a' isn't defined.
WorldMaker
Late binding is also what the above poster is complaining about and they mention the habit some have in class constructors for "early binding" to try to avoid it.
comrade1234
JavaScript used to be a nice prototype based programming language...
Anyway, I'm more interested in how this site is being published. I'm on iOS and in vertical format words are cutoff with dashes properly for that format and when I switch to landscape other words are cut off that fit that format.
Is this some simple css attribute I missed completely?
WorldMaker
To be fair, most of these complaints about functions in JS are because its roots are still a nice prototype-based programming language and the `class` syntax sugar implies class-oriented things that JS doesn't deliver and confuses prototype-oriented features as class-oriented bugs. You can still use them as features, though we are getting close to the point where using them as features is an art form for arcane wizards that will make many, many JS users scream in terror and confusion.
moritzwarhier
> JavaScript used to be a nice prototype based programming language
"this" binding depending on the call site never made sense to me. Why do you think it became worse with arrow functions and Function.prototype.bind?
In case I'm not misunderstanding you. Tbh I haven't read the article so I'm only responding to your first sentence, since the CSS hyphens thing has been cleared up already.
By the way, CSS hyphens have been my most-wanted feature ever when I was working for a web design agency. So glad to see it gain traction over the years.
There are JS libraries for this, and of course they cause ugly page reflow and/or overhead.
Prime example of what should be in the CSS domain, and such a frequent problem when putting real content into design templates.
test1235
comrade1234
I totally missed that. :) as long as the browser has a hyphenation dictionary for the language being used it will work.
fitsumbelay
one of my favorite JS bloggers, love his deep dives
threatofrain
Meh. Why are people posting on topics that both traditional media and ChatGPT would thoroughly cover with probably zero fault? Like top tier pedagogy in every form.
Does anyone think there’s anything more to squeeze on the differences between var and let?
sublinear
Traditional media and chatgpt are just aggregators. Random blogs like this are where much of the training data for communication style comes from.
threatofrain
By traditional media I mean blogs. I'm saying there are already a trillion high quality blog posts on this very topic. There's YT, wikis like MDN, bootcamps, real life or digital curriculum. These are all examples of "traditional", as opposed to chat bot style learning.
Also we definitely don't need more of this as training material, for humans or machines. It's not like you can't write a better introduction to JS, but by now the bar is very high and the likelihood of writing something good without pedagogical conviction is pretty bad.
This blog post is no different. They mock what a pedagogical voice should sound like and it sounds exactly like how this blog post carries itself.
dspillett
> ChatGPT would thoroughly cover with probably zero fault?
If I'm trying to learn something, I want that probably in “probably zero fault” to be far smaller than an LLM can legitimately promise.
fitsumbelay
I would go to Gemini with specific questions I want answers to, while I'd go to Sinclair's JS blog for deep dives into topics I'm familiar with but don't thoroughly understand (or in some cases forget critical/helpful things that I once knew). They are different types of discovery and are both very valuable.
It might also help to know that this blog is well pre-chatgpt
I'm curious what's meant by "traditional media" here: do you mean specifically books? I can't imagine there are tv or radio broadcasts dedicated to web dev, at least not U.S.
Also, even before chatgpt you could bet that at any given time there are probably a couple of hundred blogs that are competently written by fairly smart people about the same topic. That wouldn't be pedagogical, it would just be a coupole of hundred blogs competently written by fairly smart people :shrugs:
trgn
you'd have to think to ask the question first.
these sort of deep cuts people generally learn by osmosis, it bobs up through the blog roll, in conversation, at code review, ...
There is a bit more nuance in using `this` in a named function that wasn't covered. Named functions defined in classes are scoped outside of the class, meaning they are not bound to the class. To use `this` in your named function, you usually have to bind it in the constructor using `this.functionName.bind(this)`
Arrow functions defined within a class are scoped and bound to the class automatically. Hence, arrow functions do not require calling the .bind in constructor, and you can happily use `this` inside arrow functions.