Estoy usando Netbeans para agregar comentarios de tipo profesional a cada función, escribo. Entonces comienzo cada uno de ellos con /**
y luego presiono Enter
para permitir que Netbeans cumpla con el esquema de comentarios predeterminado para la siguiente función.
Hasta ahora he estado usando esto solo para el lenguaje PHP y en este caso Netbeans siempre estaba agregando @returns {type}
parte en el esquema de comentarios solo, si la siguiente función PHP realmente incluía una return
declaración. En los llamados "procedimientos" (funciones que no devuelven ningún valor) esta parte faltaba.
Hoy probé lo mismo para la función Javascript y Netbeans agregó una @returns {undefined}
parte al esquema de comentarios aunque la siguiente función no devuelve nada.
Esto me confundió. ¿Netbeans sugiere de esta manera que todas las funciones de Javascript deben devolver algo? ¿Qué tengo que hacer? Ignore (o elimine) esa parte del esquema de comentarios o siga la sugerencia (si es una sugerencia) y agregue return false;
al final de dicha función, aunque es inútil para mí.
fuente
undefined
. En muchos idiomas se devuelve el resultado de la última declaración (más útil, en mi opinión). Estos se denominan devoluciones implícitas .Respuestas:
La respuesta corta es no.
La respuesta real es sí: el motor JS debe ser notificado de que alguna función ha terminado su actividad, lo que se realiza mediante la función que devuelve algo. Esta es también la razón por la que, en lugar de "finalizada" , se dice que una función "ha regresado" .
Una función que carece de una declaración de retorno explícita regresará
undefined
, como se dice que una función C (++) que no tiene valor de retorno (y su firma refleja esto) devuelvevoid
:Además, en JS, como en la mayoría de los lenguajes, puedes simplemente ignorar el valor de retorno de una función, lo que se hace muchísimo:
En un nivel muy bajo, el retorno se traduce en una especie de salto. Si una función realmente no devolvió nada , no habría forma de saber qué y cuándo llamar a la siguiente función, o llamar a los controladores de eventos y similares.
Entonces, para recapitular: No, una función JS no necesita devolver nada en lo que respecta a su código. Pero en lo que respecta a los motores JS: una función siempre devuelve algo, ya sea explícitamente a través de una
return
declaración o implícitamente. Si una función devuelve implícitamente, su valor devuelto siempre será indefinido.fuente
void
, no devuelve nada, pero su firma refleja esto a través delvoid
tipo de retorno.return;
probablemente solo sea útil si necesita regresar antes. la escriturareturn undefined;
puede producir resultados diferentes si seundefined
resuelve en un valor diferente. La mayoría (si no todos) de los navegadores arrojarán un error cuando intente reasignar indefinido, pero en teoría, es posible que aquí tengamos un ejemplo usando node.jsvoid
en otros lenguajes (como C), donde puedes tener funciones comovoid do_someting(int *arg)
, pero no puedes tener una variable con el tipovoid
. En C,void
no es realmente un tipo, por lo que estas funciones no devuelven nada, simplemente saltanNo, vuelve no es necesaria.
Pero no hay retorno en realidad devuelve el
undefined
fuente
No, no lo hacen. Es cierto que en el fondo de la especificación, todos son ligeramente diferentes:
... sino el resultado de llamar a cada uno de ellos es el mismo:
undefined
. Entonces, en términos pragmáticos:return
, simplemente puede dejar que la ejecución del código "caiga al final" de la funciónundefined
, específicamente, simplemente escribareturn;
return;
o terminó conreturn undefined;
; todos se ven exactamente iguales a su código de llamadaRe la especificación: Específicamente, cuando la ejecución de una función cae al final, en la especificación eso es una finalización "normal"; pero
return;
yreturn value;
ambos son finalizaciones de "retorno" con un valor asociado (undefined
), que es (ligeramente) diferente. Pero la diferencia es eliminada por la semántica de llamar a una función , que dice:Entonces no hay diferencia que puedas observar en el código.
fuente
No, no es necesario que devuelva algo para cada función. Es opcional y depende de cómo escriba su lógica de código.
fuente