ES3 `catch' is block-scoped. At the last face-to-face, we talked about statically disallowing var-declarations from hoisting past let-declarations:
function f() { { let x = "inner"; { var x = "outer"; // error: redeclaration } } } I just noticed a case I missed in the discussion, which has actually existed since ES3: function g() { try { throw "inner"; } catch (x) { var x = "outer"; } } This is allowed, and it binds a function-scoped variable x, while assigning "outer" to the catch-scoped variable x. This is pretty goofy, and almost certainly not what the programmer expects. And it's exactly analogous to the function f above, which SpiderMonkey currently rejects and we all agreed Harmony ought to reject. It's too late to add this case to ES5's strict mode restrictions, but I propose we ought to reject it in Harmony. Dave _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss