Estou usando o Netbeans para adicionar comentários profissionais a cada função que escrevo. Então, começo cada um com /**
e pressiono Enter
para permitir que o Netbeans cumpra o esquema de comentários padrão para a função seguinte.
Até agora, usei isso apenas para a linguagem PHP e, neste caso, o Netbeans estava sempre adicionando @returns {type}
parte no esquema de comentários apenas, se a função PHP seguinte realmente incluísse a return
instrução. Nos chamados "procedimentos" (funções que não retornam nenhum valor) esta parte estava faltando.
Hoje eu tentei a mesma coisa para a função Javascript e o Netbeans adicionou @returns {undefined}
parte ao esquema de comentários, embora a função seguinte não retorne nada.
Isso me confundiu. O Netbeans sugere desta forma, que toda função Javascript deve retornar alguma coisa? O que devo fazer? Ignorar (ou excluir) essa parte do esquema de comentários ou seguir a sugestão (se for uma sugestão) e adicionar return false;
no final dessa função, embora seja inútil para mim?
fonte
undefined
. Em muitos idiomas, o resultado da última instrução é retornado (mais útil, IMO). Esses são chamados de retornos implícitos .Respostas:
A resposta curta é não.
A verdadeira resposta é sim: o mecanismo JS precisa ser notificado de que alguma função encerrou seu negócio, o que é feito pela função que retorna algo. É também por isso que, em vez de "concluída" , diz-se que uma função "retornou" .
Uma função que carece de uma declaração de retorno explícita retornará
undefined
, como uma função C (++) que não tem valor de retorno (e sua assinatura reflete isso) para retornarvoid
:Além disso, em JS, como em quase todas as linguagens, você está livre para simplesmente ignorar o valor de retorno de uma função, o que é feito de maneira terrível:
Em algum nível muito baixo, o retorno é traduzido em algum tipo de salto. Se uma função realmente não retornasse nada , não haveria maneira de saber o que e quando chamar a próxima função ou chamar manipuladores de eventos e outros.
Então, para recapitular: Não, uma função JS não precisa retornar nada no que diz respeito ao seu código. Mas no que diz respeito aos motores JS: uma função sempre retorna algo, seja explicitamente por meio de uma
return
instrução ou implicitamente. Se uma função retornar implicitamente, seu valor de retorno sempre será indefinido.fonte
void
, ele retorna nada, mas sua assinatura reflete isso através dovoid
tipo de retorno.return;
provavelmente só é útil se você precisar retornar mais cedo. a escritareturn undefined;
pode produzir resultados diferentes seundefined
resolver para um valor diferente. A maioria (se não todos) dos navegadores irá gerar um erro quando você tentar reatribuir undefined, mas em teoria, é possível aqui está um exemplo usando node.jsvoid
outras linguagens (como C), onde você pode ter funções comovoid do_someting(int *arg)
, mas não pode ter uma variável com o tipovoid
. Em C,void
não é realmente um tipo, então essas funções não retornam nada, elas apenas saltamNão, o retorno não é necessário.
Mas nenhum retorno realmente devolver o
undefined
fonte
Não, eles não querem. É verdade que no fundo da especificação, todos são ligeiramente diferentes:
... mas o resultado de chamar cada um deles é o mesmo:
undefined
. Então, em termos pragmáticos:return
, você pode apenas deixar a execução do código "cair do fim" da funçãoundefined
, especificamente, basta escreverreturn;
return;
ou terminou comreturn undefined;
; todos parecem exatamente iguais ao seu código de chamadaSobre a especificação: Especificamente, quando a execução de uma função sai do fim, na especificação é uma conclusão "normal"; mas
return;
ereturn value;
são ambas conclusões de "retorno" com um valor associado (undefined
), que é (ligeiramente) diferente. Mas a diferença é eliminada pela semântica de chamar uma função , que diz:Portanto, não há diferença que você possa observar no código.
fonte
Não, você não precisa retornar algo para cada função. É opcional e depende de como você escreve a lógica do código.
fonte