Atributos para utilizar funciones, estoy confundido

Buenos dias solicito ayuda con un tema de funciones con el cual me veo confundido, en una parte de los retos de la plataforma se plantea:

crear una función llamada saluda que reciba una cadena y retorne el texto “Hola [nombre]” donde [nombre] es el valor de la cadena que se recibió por parámetro.

Donde nos dan unos ejemplos:

saluda("juan"); // => "Hola juan"
saluda("Yu-kai Chou") // => "Hola Yu-kai Chou"

pense que los parametros que recibia una función deberian ser diferentes, he intentado resolver este ejecicio de varias maneas y parece que no es como lo planteo pues tanto en node como en la consola web, una vez declaro mi funcion:

function saluda("Juan"){
}

ya tengo un error de sintaxis me tiene loco esa parte porque les dejo mis soluciones aca y funciona no se que falla no se si soy yo que no entiendo una ayuda gracias.

Codigo 1:

function saluda(nombre) {
  return "Hola " + nombre;
}

var g1 = Hola("Juan");
console.log(g1);

Codigo 2

function saluda(nombre){
console.log("Hola " + nombre)
}

saluda("Juan")

Codigo 3

function saluda (nombre){
return "Hola " + nombre
}

const saludo = saluda("Juan")
console.log (saludo)

Gracias por su amable atención.

Hola mi hermano,

Primero:
Creas la función:

Function (palabra reservedada del programa para indicar q es una funcion) nombre de la función, seguido al nombre va un paréntesis () dentro del parentesis van los parámetros o variables q utiliza la función, y dentro de las llaves lo q hace la funcion

La función se llama saluda y recibe un nombre de caracter string … Finalmente retorna ese nombre mas un hola

function saluda (nombre) {
return "Hola " + nombre;
}

Luego imprimes con console.log una acción… Como tienes una funcion y quieres imprimir lo q ella hace pues dentro del console.log llamas la funcion saluda que asi le pusimos… recuerda q la función tiene un parámetro que debe recibir “nombre” y le pones como parámetro el nombre Juan:

Console.log(saluda(“Juan”))

Hola @Arley,

Creo que estás confundiendo la definición con la invocación de una función. La definición sería:

function saluda(nombre) {
}

Las funciones sólo se definen una única vez pero se pueden invocar (llamar) muchas veces. Ejemplos de invocación sería los siguientes:

saluda(“juan”); // => “Hola juan”
saluda(“Yu-kai Chou”) // => “Hola Yu-kai Chou”

El primer código que propones no es válido porque los parámetros en la definición de una función son como variables, pero tu estás pasando un string:

// este código no es válido
function saluda(“Juan”){
}

Quizá una forma de entender las funciones en programación es ver su equivalente en funciones matemáticas. Por ejemplo:

f(x) = 2 * x

Esta función multiplica cada número por 2. En este caso x es el parámetro y lo podemos reemplazar con cualquier valor:

f(2) = 2 * 2 = 4
f(3) = 2 * 3 = 6
f(10) = 2 * 10 = 20

Los códigos que muestras al final están bien, el Código 1 es igual al Código 3 (la única diferencia es el punto y coma al final, que es opcional).

La diferencia con el Código 2 es que este no retorna nada sino que imprime el resultado en consola. Generalmente es mejor que las funciones retornen una valor en vez de imprimirlo directamente, las hace más reutilizables (se pueden utilizar fuera de la consola, por ejemplo en una aplicación Web).

En conclusión, la sintaxis de los códigos que compartes al final están bien, en cambio, el que compartes al principio está mal.

Yo te recomendaría revisar nuevamente el video de funciones de las 2 semanas de JavaScript que ahí explico bien la diferencia entre definir e invocar una función, y entre retornar e imprimir el resultado, que siento que son las dos partes en las que estás confundido.