Re:Stimulation Clicker
by myfonj on Wednesday January 08, 2025 @07:46AM
(#42633597)
Filed as https://issues.chromium.org/issues/388437264
[ Parent
| on HN ]
Re:Stimulation Clicker
by throwaway127482 on Wednesday January 08, 2025 @07:18PM
(#42640135)
I bet it's working as intended. The $ symbol is probably a special feature of the console and is not intended to be a property of window. Inside setInterval, the function is no longer being executed in the special console environment, which has access to that symbol.
Yes, I guess there could be some intention behind that, presumably some security precautions, but still: the fact that you can see $ in the globalThis (as a non-enumerable prop), and that globalThis you see from inside the timeout-ed function is strictly equal to globalThis seen directly from the console, that makes it somewhat spooky.
console.log(Object.getOwnPropertyDescriptor(globalThis, '$'))
// {writable: true, enumerable: true, configurable: true, value: f}
globalThis.globalThat = globalThis
globalThat.$ === globalThis.$
// true
setTimeout(()=>console.log(globalThis.globalThat === globalThis))
// true
setTimeout(()=>console.log(Object.getOwnPropertyDescriptor(globalThis, '$')))
// undefined (!)
$ = $
setTimeout(()=>console.log(Object.getOwnPropertyDescriptor(globalThis, '$')))
// { writable: true, enumerable: true, configurable: true, value: f}
And it (`setTimeout(()=>{console.log(typeof $==="function")},0)`) works in Firefox. (Interestingly, you cannot get $'s descriptor in there, but you have it always available in timeout.)