Todas as funções Javascript precisam retornar um valor?

Eu estou usando o NetBeans para adicionar comentários profissionais para cada function, escrevo. Então começo cada um com /** e, em seguida, pressiono Enter para permitir que o Netbeans cumpra o esquema de comentários padrão para a function seguinte.

Até agora eu tenho usado isso apenas para linguagem PHP e neste caso o Netbeans sempre estava adicionando a parte @returns {type} no esquema de comentário apenas, se seguir a function PHP realmente incluía a instrução return . Nos chamados “procedimentos” (funções que não retornam nenhum valor) esta parte estava faltando.

Hoje eu tentei a mesma coisa para a function Javascript e o Netbeans adicionou a parte @returns {undefined} ao esquema de comentário, mesmo que a function seguinte não retorne nada.

Isso me confundiu. O NetBeans sugere que todas as funções Javascript precisam retornar alguma coisa? O que devo fazer? Ignore (ou apague) essa parte do esquema de comentários ou siga a sugestão (se essa for a sugestão) e adicione return false; no final de tal function, embora seja inútil para mim?

    A resposta curta é não.

    A verdadeira resposta é sim: o mecanismo JS precisa ser notificado de que alguma function terminou seu negócio, o que é feito pela function que retorna algo. É também por isso que, em vez de “terminado” , se diz que uma function “retornou” .
    Uma function que não possui uma instrução de retorno explícita retornará undefined , como uma function C (++) que não tem valor de retorno é dito (e sua assinatura reflete isso) para retornar void :

     void noReturn()//return type void { printf("%d\n", 123); return;//return nothing, can be left out, too } //in JS: function noReturn() { console.log('123');//or evil document.write return undefined;//< -- write it or not, the result is the same return;//<-- same as return undefined } 

    Além disso, no JS, como na maioria das linguagens, você está livre para simplesmente ignorar o valor de retorno de uma function, o que é feito bastante:

     (function() { console.log('this function in an IIFE will return undefined, but we don\'t care'); }()); //this expression evaluates to: (undefined);//but we don't care 

    Em algum nível muito baixo, o retorno é traduzido em algum tipo de salto. Se uma function realmente não retornasse nada , não haveria como saber o que e quando chamar a próxima function ou chamar manipuladores de events e coisas do tipo.

    Então, para recapitular: Não, uma function JS não precisa retornar nada no que diz respeito ao seu código. Mas, no que diz respeito aos mecanismos de JS: uma function sempre retorna algo, seja explicitamente por meio de uma instrução de return ou implicitamente. Se uma function retornar implicitamente, seu valor de retorno será sempre indefinido.

    Não, o retorno não é necessário.

    Mas sem retorno, na verdade, retornar o undefined

    Não, você não precisa retornar algo para cada function. É opcional e até como você escreve sua lógica de código.

    Todas as funções Javascript precisam retornar um valor?

    Não, eles não. É verdade que no fundo da especificação, tudo isso é um pouco diferente:

     function foo() { } function foo() { return; } function foo() { return undefined; } 

    … mas o resultado de chamar cada um deles é o mesmo: undefined . Então, em termos pragmáticos:

    1. Você não tem que escrever um return , você pode simplesmente deixar a execução do código “cair no final” da function
    2. Se você está retornando undefined , especificamente, você apenas escreve um return;
    3. Ao chamar uma function, você não pode dizer (no código) se a execução caiu no final, terminou com o return; ou terminou com return undefined; ; todos eles parecem exatamente o mesmo para o seu código de chamada

    Re spec: Especificamente, quando a execução de uma function cai no final, na especificação que é uma conclusão “normal”; mas return; e return value; são ambas as conclusões de “retorno” com um valor associado ( undefined ), que é (muito ligeiramente) diferente. Mas a diferença é eliminada pela semântica de chamar uma function , que diz:

    1. Se o resultado [[Type]] for return , retorne NormalCompletion ( resultado . [[Value]]).
    2. ReturnIfAbrupt ( resultado ).
    3. Retorna NormalCompletion ( indefinido ).

    Então não há diferença que você possa observar no código.