Earlier quoted context omitted.
Filed as https://issues.chromium.org/issues/388437264
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.
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.)