> From: [email protected] [mailto:[email protected]] 
> On Behalf Of David Herman
> Sent: Wednesday, December 26, 2012 19:50
 
> I imagine your reply is: don't do that transformation; place your `let` 
> declarations as late as possible before they are going to be used. I guess I 
> need to be convinced that the equivalence is of no value.

I would agree with this putative reply, and state that the equivalence is 
indeed of no value. What follows is my subjective feelings on why that is; I 
hope they are helpful, but I certainly don't claim this perspective is 
objectively better.

My perspective is as someone coming from other languages. Hoisting is, in my 
experience, a uniquely JavaScript weirdness. (Admittedly I don't have 
experience with too many other languages.) It often makes the top 3 list of 
JavaScript gotchas, hardest language features to understand, interview 
questions, etc. Having semantics where UBI is prohibited would bring back some 
sanity to the proceedings, and in an "always use let" world, eliminates 
hoisting almost entirely. (The remaining case is function declarations, which 
are much less confusing since there is no assignment involved.)

The fact that var declarations are manually hoisted to the top of the function 
by some is a direct consequence of the equivalence you mention; it's 
programmers trying to "do what the computer would do anyway." I would guess 
that what most programmers *want* is the ability to declare variables as close 
as possible to their actual use. They manually hoist, instead, because the 
language does not support the semantics they desire; in other words, 
declaration-close-to-use is "deceptive" in that your code looks like it's doing 
something, but the computer will hoist, making the code do something slightly 
different. If we gave them semantics that supported declare-close-to-use, viz. 
TDZ-UBI semantics, everything would be happy and there would be rejoicing in 
the streets. If we just hoisted to the top of the block, then the ability to 
declare close to use while maintaining parallel semantics to those the computer 
will do anyway is lost (in many cases).

That said, `let` has a lot going for it even without TDZ-UBI. E.g. the ability 
to use blocks to prevent scope pollution, or the sane per-loop bindings. So I'm 
a fairly-happy clam as-is. Just wanted to put in a word in favor of TDZ-UBI.
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to