Hola Darling.
Eso ocurre porque todas las variables y constantes utilizadas dentro de una etiqueta <script> y de manera general; todas las variables declaradas en cualquier lenguaje de programación, tienen un alcance o ámbito.
El alcance o ámbito de la variable declarada, depende de donde fue declarada.
En nuestro caso si la declaras dentro de nuestra etiqueta <script>, esa variable declarada tendrá el alcance o ámbito en toda nuestra etiqueta <script>; es decir, toda sentencia, instrucción o función que este dentro de nuestra etiqueta tendrá acceso a nuestra variable (entiéndase alcance como quién y donde puede usar nuestra variable declarada).
Si la declaras dentro de una función, solo la función puede acceder a esta variable; una vez que nuestro programa sale de la función, no es capaz de reconocer esa variable declarada en esa función especifica.
Igual si declaras una variable dentro de un while o dentro de un for o de un if-else ; su alcance o ámbito solo será dentro de ese ciclo en particular y no estará disponible para las demás funciones, ciclos o procedimientos de tu código.