On Sep 13, 2013, at 9:58 AM, Andreas Rossberg <rossb...@google.com> wrote:
> On 13 September 2013 18:39, Oliver Hunt <oli...@apple.com> wrote: >> The problem with temporal dead zones is that they lead to weird behaviour in >> edge cases, and almost all of them should be syntactically identifiable as >> errors up front. The problem is that you can only _almost_ get syntax >> checked behaviour upfront because eval. > > There must be a misunderstanding -- eval is not relevant to the issue > that TDZ is addressing. The issue is mutual recursion between > bindings that can perform arbitrary (higher-order) computations. In > that situation, it is generally impossible to ensure the absence of > errors without a type system. And even with one, it is tedious to the > degree that it is arguably impractical. So, as long as JavaScript > allows that (and I don't see how we can change that), TDZ is the > best/only we can do. > > What "weird edge case" do you have in mind? I cannot imagine anything > that isn't even weirder without TDZ. > It isn't eval doing anything magic here - you can syntactically identify and use of not yet live properties, except eval(), e.g. function f1(a=b, b=...) ... // can syntax error easily function f2(a=function () {return b}, b=...) ... // again you can syntax error, or you can be clever and say we're not calling it and not error function f3(a=function () {return b}(), b=...) ... // syntax error as we can prove you're going to use b function f4(a=eval("b"), b=...) ... // eval makes things opaque Personally I don't believe TDZ's are a good solution - they essentially add another null/undefined value internally. They make things more complex for developers. I certainly don't get what the TDZ win is for default parameters, and example would help me reason about it. > /Andreas _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss