Olá, Marcelo! Tudo bom com você?
Muito bons seus desafios, continue assim buscando evoluir cada vez mais e você vai longe! Quanto as suas dúvidas, vamos por parte:
DESAFIO 1
Eu fiz um teste e não tive nenhum problema como o que você disse, da função ficar rodando sem parar. Mas de qualquer forma, essa forma que você for (console.log = alert('Olá, mundo')) está incorreta. O correto seria ter somente um 'alert('Olá, mundo!')' ou um 'console.log('Olá, mundo!')'.
DESAFIO 3
Também fiz alguns testes aqui e vi que você poderia ter feito dessa seguinte forma, colocando um alert dentro da função:
let meuNumero = prompt('Digite um numero e descubra o dobro dele: ')
function dobroNumero(numero) {
alert(`O dobro do número é ${numero * 2}`)
}
dobroNumero(meuNumero)
DESAFIO 4
Nesse desafio, é necessário colocar o 'parseInt' nas variáveis de número porque o comando 'prompt' retorna uma string como valor. Sendo assim, não se trata de um número, e sim de um texto que simboliza o aquele número. Logo, a função da média é feita com o valor que essa string possui na tabela Unicode e retorna um valor.
Usando o comando 'parseInt', você garante que o valor digitado no 'prompt' é realmente um número e a média pode ser feita normalmente.
Enfim, espero que tenha conseguido sanar um pouco das suas dúvidas, Marcelo, e que tenha conseguido te ajudar de alguma forma.
Bons estudos e abraços, meu amigo!