¿Por qué esto no funciona?
setTimeout(window.location.reload, 1000)Esto hace
setTimeout(() => window.location.reload(), 1000)El primer parámetro es una función. ¿No debería funcionar el primer ejemplo?
El problema es que está pasando una referencia suelta a la función de reload ; por lo tanto, pierde su vinculación con window.location .
Puede usar lo siguiente para probar el punto (Puede que no funcione
setTimeout(window.location.reload.bind(window.location), 1000)Pero creo que agregar un contenedor de función lo hace más fácil de entender.
Ejemplo
const a = { value: 2, b: function() { console.log(this.value); } } ab(); const b = ab; b(); const boundB = b.bind(a); boundB(); Resumen El uso de una sintaxis como ab() asegura que b se llame con a como this .
Llamar a una función sin un . antes irá la función como global, que pasará window como this en modo sloppy y null como this en modo estricto.
Esto siempre se puede anular mediante la función de vinculación o mediante el uso de funciones de flecha (que toman this del this circundante) o si vincula su función con anticipación.
No funcionará ya que el alcance de llamar a window.location.reload será window en lugar de window.location . Prueba esto:
window.location.reload.call(window);contra
window.location.reload.call(window.location);Esta publicación lo resume muy bien https://stackoverflow.com/a/10840058/10853009
Porque
reload()necesitawindow.locationcomothis. En otras palabras, es un método dewindow.location. Cuando tu dices:
var fun = window.location.reload; fun();Está llamando a la función
reload()sinthisreferencia (o con una referencia dewindowimplícita).