Because reload() needs window.location as this. In other words – it is a method of window.location. When you say:
var fun = window.location.reload;
fun();
You are calling reload() function without any this reference (or with implicit window reference).
This should work:
setTimeout(window.location.reload.bind(window.location), 250);
The window.location.reload.bind(window.location) part means: take window.location.reload function and return a function that, when called, will use window.location as this reference inside reload().
See also
- How can I pass an argument to a function called using setTimeout?
- Why doesn’t console.log work when passed as a parameter to forEach?
- Preserve ‘this’ reference in javascript prototype event handler