Должна ли каждая функция Javascript возвращать значение?

Я использую Netbeans для добавления профессиональных комментариев к каждой функции, я пишу. Поэтому я начинаю каждый из них с /** и затем я нажимаю Enter чтобы Netbeans выполнял схему комментариев по умолчанию для следующей функции.

до сих пор я использовал это только для языка PHP, и в этом случае Netbeans всегда добавлял @returns {type} часть в схеме комментариев только, если следующая функция PHP действительно включена return заявление. О так называемых " процедурах "(функциях, которые не вернуть любое значение) эта часть отсутствовала.

сегодня я попробовал то же самое для функции Javascript и Netbeans добавил @returns {undefined} часть для комментария схемы, даже если следующая функция ничего не возвращает.

это меня смутило. Предполагает ли Netbeans, что каждая функция Javascript должна возвращать что-либо? Что мне делать? Игнорировать (или удалить) эту часть схемы комментариев или следовать предложению (если это предложение вообще) и добавить return false; в конце такой функция, хотя она бесполезна для меня?

4 ответов


короткий ответ: нет.

на реальные ответ да: движок JS должен быть уведомлен о том, что какая-то функция закончила свое дело, что делается функцией, возвращающей что-то. Вот почему вместо "закончен", функция называется "вернулись".
Функция, в которой отсутствует явный оператор return, будет возвращать undefined, как функция C (++), которая не имеет возвращаемого значения, говорится (и его подпись отражает это) вернуться 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
}

кроме того, в JS, как и в большинстве языков, вы можете просто игнорировать возвращаемое значение функции, что делается очень много:

(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

в какой-то очень низкого уровня, переводится в какой-то прыжок. Если функция действительно вернула ничего вообще, не было бы никакого способа узнать, что и когда вызывать следующую функцию или вызывать обработчики событий и как.

Итак, чтобы резюмировать: нет, функция JS не должна возвращать ничего, насколько ваш код идет. Но что касается двигателей JS: функция всегда возвращает что-то, будь то явно через return заявление, или неявно. Если функция возвращает неявно, ее возвращаемое значение всегда будет неопределенным.


нет, возвращение не надо.

а не возвращение на самом деле вернуть undefined


нет, вам не нужно возвращать что-то для каждой функции. Это по желанию и до того, как написать код.


должна ли каждая функция Javascript возвращать значение?

нет, не знают. Это правда, что глубоко в спецификации, это все немного другое:

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

...но результат вызов у каждого из них один и тот же: undefined. Итак, в прагматических терминах:

  1. вам не нужно писать return, вы можете просто позволить выполнению кода "упасть с конца" функция
  2. если вы возвращаете undefined, в частности, вы просто напишите return;
  3. при вызове функции вы не можете сказать (в коде), упало ли выполнение с конца, закончилось return;, или закончился return undefined;; они все выглядят точно так же для вашего вызывающего кода

Re спецификация: в частности, когда выполнение функции падает с конца, в спецификации это" нормальное " завершение; но return; и return value; как "возвращение" дополнения со связанным значением (undefined), который (хотя бы немного) отличается. Но разница устраняется семантикой вызов функции, которые говорят:

...

  1. если результат.[[Type]] is return, возврат NormalCompletion (результат.[[Значение.)]]
  2. ReturnIfAbrupt (результат).
  3. вернуться NormalCompletion ( undefined).

таким образом, нет никакой разницы, которую вы можете наблюдать в коде.