<div dir="ltr">The following is currently possible with setTimeout from the browser<br><br>const i = setTimeout(() => {})<br><br>Where "i" is a number from 0 incrementing towards infinity.<br><br>This however has the issue that it is entirely global, and as the title of the post suggests the idea is to strike a middle ground between global and name-spaced; That is the ability to create/access your own name-spaced state similar to Symbol.for. As an example â€“ a name-spaced incrementing number:<br><br>// a.js<br>const fn = UID.for('namespace')<br><br>assert(fn() === 0)<br>assert(fn() === 1)<br><br>// b.js<br><br>const fn = UID.for('namespace')<br><br>assert(fn() === 2)<br>assert(fn() === 3)<br><br>This however would be implemented in user-land on top of a more general proposal for creating cross realm name-spaced objects:<br><br>// a.js<br>const obj = Object.for('namespace')<br><br>// b.js<br>const obj = Object.for('namespace')<br><br>Where both objects "obj" in the files a.js and b.js would point to the same object.<br><br>Disclaimer: I'm aware all of the above can be implemented with global state if you disregard the cross-realm requirement.</div>