Es que en el primer código estás creando la referencia dentro de la función y el segundo estás asignando un valor son dos cosas totalmente distintas. Entiendo que sí tiene sentido, solo que estás interpretando que hacer una referencia es declararla como global, es decir que todo el código debe interpretar la referencia estando fuera y adentro de la función y no así, por la razón del alcance de las variables. Puede que en un futuro tu hagas algún código que quieras que las variables tengan referencia dentro de la función pero que no se sepa fuera de ella las referencias (digo, no entiendo por qué harías esto, pero puede darse el caso
) al tener la regla del alcance de las variables se cumple. Si deseas que algo tenga alcance fuera debes declararlo forzosamente usando global (que creo que entiendes este concepto, solo lo doy por dato adicional).