¿Por qué la callback setInterval se ejecuta solo una vez?

Tengo este contador que hice pero quiero que funcione para siempre, es realmente simple, ¿qué estoy haciendo mal aquí?

function timer() { console.log("timer!") } window.setInterval(timer(), 1000) 

    Usó una llamada de función en lugar de una referencia de función como el primer parámetro de setInterval. Hazlo asi:

     function timer() { console.log("timer!"); } window.setInterval(timer, 1000); 

    O más corto (pero cuando la función se hace más grande y menos legible):

     window.setInterval( function() { console.log("timer!"); }, 1000) 

    setInterval y setTimeout deben usar con devoluciones de llamada, como:

     setInterval(timer, 1000); 

    o funciones sin nombre:

     setInterval( function() { console.log("timer!"); }, 1000 ); 

    Por qué su código no funciona: cuando pasa una función como argumento a otra función con corchetes, por ejemplo, doSomething ( someFunc() ) está pasando el resultado de la función.

    Cuando la función se pasa como objeto, por ejemplo, doSomething ( someFunc ) , está pasando una callback. De esta forma, someFunc se pasa como referencia y se ejecuta en algún lugar de la función de llamada. Esto es lo mismo que los punteros a funciones en otros idiomas.

    Un error común es usar estas dos funciones como se muestra en w3schools . Esto hace un llamado implícito a eval .