# Could we just drop the TDZ for let

**URL:** <https://es.discourse.group/t/could-we-just-drop-the-tdz-for-let/2554>\
**Category:** I have questions\
**Created:** [April 30, 2026, 12:19pm UTC](https://es.discourse.group/t/could-we-just-drop-the-tdz-for-let/2554 "2026-04-30T12:19:40Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![conartist6](https://yyz2.discourse-cdn.com/free1/user_avatar/es.discourse.group/conartist6/32/515_2.png) [@conartist6](https://es.discourse.group/u/conartist6)\
**Post date:** [April 30, 2026, 12:19pm UTC](https://es.discourse.group/t/could-we-just-drop-the-tdz-for-let/2554/1 "2026-04-30T12:19:40Z")

</div>

Not so much an idea or a proposal as a random thought that just crossed my mind.

Couldn't we go ahead and just drop the TDZ for `let`?

One one hand you might say, "no this is impossible, that is set in stone now and we can't change it". This _may_ be the truth!

But let's look at the other side:

- The language generally evolves by turning former errors into valid code
- You'd have write a _really_ weird application for happy-path behavior to rely on a TDZ check throwing for correctness. I haven't done the research to be able to say if there are 0 usages of this pattern on the internet, but to the best of my knowledge it's plausible

And then we'd finally have good variables: locally scoped, fast. It wouldn't be table stakes for perf optimization to turn `let` into `var` anymore.

`const` really requires a TDZ check to avoid allowing access to uninitialized constants, so that would stay just how it is. Only `let` would be affected by this hypothetical change

---

<div class="post-metadata">

**Author:** ![aclaymore](https://yyz2.discourse-cdn.com/free1/user_avatar/es.discourse.group/aclaymore/32/501_2.png) [@aclaymore](https://es.discourse.group/u/aclaymore)\
**Post date:** [April 30, 2026, 4:29pm UTC](https://es.discourse.group/t/could-we-just-drop-the-tdz-for-let/2554/2 "2026-04-30T16:29:49Z")

</div>

[agendas/2023/09.md at 313701c65d25ff959f62b2f81c3487bd464f85f3 · tc39/agendas · GitHub](https://github.com/tc39/agendas/blob/313701c65d25ff959f62b2f81c3487bd464f85f3/2023/09.md) Had a topic on TDZ

---

<div class="post-metadata">

**Author:** ![MaxArt](https://yyz2.discourse-cdn.com/free1/user_avatar/es.discourse.group/maxart/32/2315_2.png) [@MaxArt](https://es.discourse.group/u/MaxArt)\
**Post date:** [May 6, 2026, 7:07am UTC](https://es.discourse.group/t/could-we-just-drop-the-tdz-for-let/2554/3 "2026-05-06T07:07:39Z")

</div>

`var` isn't going anywhere, you know. If you want a "TDZ-less" `let`, shouldn't `var` suffice?

Also, I'm not sure what's your use case. Can you provide an example?

---

<div class="post-metadata">

**Author:** ![conartist6](https://yyz2.discourse-cdn.com/free1/user_avatar/es.discourse.group/conartist6/32/515_2.png) [@conartist6](https://es.discourse.group/u/conartist6)\
**Post date:** [May 6, 2026, 11:35am UTC](https://es.discourse.group/t/could-we-just-drop-the-tdz-for-let/2554/4 "2026-05-06T11:35:31Z")

</div>

It seems to me from the way that people vote with their feet that they have told us exactly what they want.

Bock scope.

No TDZ.
