Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"can't create duplicate variable that shadows a global property"

Getting this error on Safari 10

Happens when a const is given a name that's exactly the same as an id of any element on the page.

const abc = document.querySelector("#abc"); //err
const abz = document.querySelector("#abc"); //no err
var abc = document.querySelector("#abc"); //no err

Is there a reason for this?
I know you can access the elements via window.abc, is that part of the why?

Test:

<!doctype html>
<html><body>
<div id="alpha"></div>
<script>
    const alpha = document.querySelector('#alpha');
    console.log(alpha);
</script>
</body></html>
like image 689
House3272 Avatar asked Oct 17 '16 16:10

House3272


2 Answers

This is apparently a problem Safari has with declaring a let/const variable that shares the same name as a selected id attribute. I had some variables declared with const as you did and got the same error. Changed to let and still got it. Changed to var and it worked.

like image 58
Nathan Avatar answered Sep 27 '22 22:09

Nathan


This must be linked to this webkit bug

In the meantime you may either replace const by var, or change the name of your variable (eg: _alpha).

like image 44
vinyll Avatar answered Sep 27 '22 23:09

vinyll