Bug 153441
Summary: | Global lexical declarations should shadow configurable global properties | ||
---|---|---|---|
Product: | WebKit | Reporter: | Elliott Sprehn <esprehn> |
Component: | JavaScriptCore | Assignee: | Ryosuke Niwa <rniwa> |
Status: | RESOLVED DUPLICATE | ||
Severity: | Normal | CC: | adamk, ggaren, keith_miller, rniwa, saam, ysuzuki |
Priority: | P2 | ||
Version: | WebKit Nightly Build | ||
Hardware: | Unspecified | ||
OS: | Unspecified |
Elliott Sprehn
ex.
class Node { }
SyntaxError: Can't create duplicate variable that shadows a global property: 'Node'
but you can write
var Node = class Node { }
this works fine in Chrome and Firefox 45.
Attachments | ||
---|---|---|
Add attachment proposed patch, testcase, etc. |
Elliott Sprehn
This is still broken, I think something is wrong in your lexical scoping.
Elliott Sprehn
I just checked today's nightly: r202375 and it still happens.
Adam Klein
In general, it seems that JSC refuses to create lexical bindings that shadow configurable properties on the global object, contra the spec (see https://tc39.github.io/ecma262/#sec-hasrestrictedglobalproperty). Here's a DOM-less repro:
>>> let Array = 5
Exception: SyntaxError: Can't create duplicate variable that shadows a global property: 'Array'
or one with a self-created property:
>>> Object.defineProperty(this, 'foo', {value: 5, configurable: true, writable: true})
[object global]
>>> let foo = 10
Exception: SyntaxError: Can't create duplicate variable that shadows a global property: 'Foo'
Saam Barati
*** This bug has been marked as a duplicate of bug 148763 ***