Oi, Tiago! Tudo bem?
O que está ocorrendo no nosso código é o seguinte: na função cifrarMensagem estamos buscando cifrar uma mensagem, para isso passamos dois parâmetros para essa função, mensagem e movimentos, de forma que mensagem se refere à palavra que vai ser cifrada e movimentos se refere ao deslocamento que será feito em cada caractere da mensagem original através da movimentação das posições de cada caractere para a frente na tabela ASCII.
Dessa forma, a função cifrarMensagem irá receber "alura" como o parâmetro mensagem, logo "alura" será a palavra a ser cifrada. Em seguida, a função split('') irá converter a string "alura" em um array de caracteres individuais, contendo os caracteres ["a", "l", "u", "r", "a"].
Após isso, a função map é aplicada a esse array, e para cada caractere, o código ASCII correspondente é obtido usando charCodeAt(0). Em seguida, é adicionado o valor de movimentos a esse código para obter o código do caractere cifrado. Ou seja, é incrementado 4 ao valor da posição do código Unicode na tabela ASCII para cada caractere, ocorrendo para cada caractere a conversão como podemos observar na imagem abaixo da tabela ASCII:
Após isso, a função String.fromCharCode é usada para converter os valores Unicode em caracteres correspondentes. Dessa forma, o array de caracteres caracteres ["a", "l", "u", "r", "a"] se transforma no array de caracteres ["e", "p", "y", "v", "e"], um novo array com os caracteres cifrados.
Em seguida, a função join("") é usada para unir todos os caracteres do array em uma única string, que é retornada pela função cifrarMensagem. Por isso o retorno do código é a string "epyve".
Espero ter ajudado na compreensão do problema. Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!
Um forte abraço e bons estudos!
Caso este post tenha te ajudado, por favor, marcar como solucionado ✓