3 ms·
> there's absolutely no reason to use var any more. So I also thought. And then I recently learned that typescript uses `var` internally for performance. Fro
by dunham 2y ago
> there's absolutely no reason to use var any more.
So I also thought. And then I recently learned that typescript uses `var` internally for performance.
From src/compiler/checker.ts:
// Why var? It avoids TDZ checks in the runtime which can be costly.
// See: https://github.com/microsoft/TypeScript/issues/52924
/* eslint-disable no-var */
var deferredDiagnosticsCallbacks: (() => void)[] = [];
- nsonha 2y agoI can think of a few when hoisting is nice, stylistically: if (...) var x = ... else x = ... ///// try { var x = ...} catch (error) { x = ... } ///// for (...) { var x: NodeJS.Dict<any> = {} x[key] = ... } return x
- afavour 2y agoAll of those feel like anti patterns to me. Much more difficult to read.
- nsonha 2y agoThat's subjective, Idk about "MUCH more difficult". All it does is moving the declaration to the correct visual scope, instead of a dangling up-front declaration. Admittedly, I understand most coders are aready trained to read the latter.
- wruza 2y agoThe worst anti-pattern here is the catch- and finally-blocks living in a different scope. Really, who thought it was a good idea that finalization and error handling blocks must have no access to their subject scope? Every damn language copies that nonsense, except for js and its `var` hoisting.
- goodoldneon 2y agoIf performance is so important for your app that `var` is causing issues then JavaScript is likely the wrong language