3 ms·
Not true at the top-level.
by sestep 2y ago
Not true at the top-level.
- wruza 2y agoNot sure what you find not true about it. All named “function”s get hoisted just like “var”s, I use post-definitions of utility functions all the time in file scopes, function scopes, after return statements, everywhere. You’re probably thinking about const foo = function (){} without its own name before (). These behave like expressions and cannot be hoisted.
- MetaWhirledPeas 2y ago> I use post-definitions of utility functions all the time in file scopes, function scopes, after return statements, everywhere I haven't figured out if people consider this a best practice, but I love doing it. To me the list of called functions is a high-level explanation of the code, and listing all the definitions first just buries the high-level logic "below the fold". Immediately diving into function contents outside of their broader context is confusing to me.
- wruza 2y agoI don’t monitor “best” practices, so beware. But in languages like C and Pascal I also had a habit of simply declaring all interfaces at the top and then grouping implementations reasonably. It also created a nice “index” of what’s in the file. Hoisting also enables cross-imports without helper unit extraction headaches. Many hate js/ts at the “kids hate == and null” level but in reality these languages have a very practical design that wins so many rounds irl.