


Why I Prefer function Declarations for Top-Level Symbols (But Wont Use Them Anymore)
Oct 24, 2024 am 06:18 AMToday, we’ve decided to use arrow functions exclusively at work.
We have a common ESLint config, and the team voted to unify this rule across all projects.
And honestly I'm not a fan of this particular rule
Personally... function declarations feels more expressive, at least for top-level symbols:
some-screen-of-my-app.tsx
import {} ... export function SomeScreen(props: Props) { const { myContext } = useMyContext() const [state, setState] = useState() const doSomething = () => { ... } const handleSomething = () => { ... } return <>...</> } function SomeInternalComponent() { ... }
This is how i'm used to write components: declaring a function feels like a chapter title in a novel.
function Chapter3(storySoFar: Props) { // where the Hero meets the Villain }
But I do understand the team need: depending on the original author of a module we might find at first level const () => {} or function.
The main argument is that "arrow functions are more readable" (which i disagree with)
import {} ... const SomeInternalComponent = () => { ... } export const SomeScreen = (props: Props) => { const { myContext } = useMyContext() const [state, setState] = useState() const doSomething = () => { ... } const handleSomething = () => { ... } return <>...</> }
I tried to find some technical advantage to support my preference... some nerd *pitimini* [ something small or insignificant ] that moves the balance on my benefit but since we all agree on the following:
- No Classes (just functions)
- No global stuff (modern modules)
- No this
There are no significant differences between each one.
Diving into Details:
const foo = () => { ... }
- No hoisting
- function's name is derived from the variable's name ("foo")
- Can't be overwritten later like foo=...
- Doesn't create the prototype object foo.prototype
- Can't be used as a constructor new foo()
- Doesn't have arguments
- this value is defined by where the function is declared
function foo() { ... }
- Hoisting
- function name is obv.
- Can be overwritten like foo = ...
- Creates the object prototype foo.prototype
- new is allowed like: new foo() (which would link the prototype)
- this value is defined by how the function is called
In the end, I prefer the Superior Clarity of function for top-level components, but the will of the many prevails.
Kidding, I will adapt. Having a unified style will help to maintain a cohesive codebase.
???.
thanks for reading
The above is the detailed content of Why I Prefer function Declarations for Top-Level Symbols (But Wont Use Them Anymore). For more information, please follow other related articles on the PHP Chinese website!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Replace String Characters in JavaScript

HTTP Debugging with Node and http-console

Custom Google Search API Setup Tutorial
