¡Hola!
Quizás te quede más claro con ejemplos más concretos.
<meta charset="UTF-8">
<script>
function saludar(nombre){
document.write("<h1>Hola " + nombre + "!!</h1>");
}
saludar("Fernando");
</script>
En el extracto de código anterior, el resultado es Hola Fernando!!
Como habrás podido observar, en ningún lado estamos especificando explícitamente el tipo de dato del parámetro que acabamos de ingresar a la función, es decir, la palabra "Fernando". JavaScript nos ayuda con esa tarea y de forma automática ha identificado el tipo de dato que hemos ingresado y lo ha sustituido según corresponde.
¿Qué hubiera sucedido si ingresamos, en cambio, un valor numérico?
saludar(5334);
El resultado sería el siguiente: Hola 5334!! sin embargo, debemos notar que en la función ingresamos un número, porque no está delimitado entre comillas. Pero una vez dentro de la función JavaScript ha decidido que ese número, para efectos de nuestra función, es una cadena, es decir, "5334". JavaScript ha hecho esto porque está diseñado para ello. Por lo general, asociará el tipo de dato String para la mayoría de sus parámetros.
¿Entonces, cómo puedo trabajar con un valor numérico que ingresé a una función, si ésta fue detectada por JavaScript como una cadena?
Simple, en el cuerpo de la función debemos cambiar el tipo de dato del parámetro. Por ejemplo, podemos hacer esto:
var number = parseInt(nombre);
Lo que hemos hecho fue cambiar el tipo de dato del parámetro nombre que habíamos ingresado como 5334 a entero, y lo hemos almacenado en una variable llamada number. Tampoco hemos definido el tipo de dato para la variable number, pero JavaScript ha decidido que es un entero ya que el valor que se ha almacenado ha recibido un cambio de tipo de dato explícito a través del método parseInt.