Подтвердить что ты не робот

Требуется ли "возврат" в последней строке функции JS?

Какова наилучшая практика завершения функции JS, если она ничего не возвращает?

function (a) {if (a) {setTimeout()} return;}

В этом случае "возврат" не нужен, но я оставляю его для удобства чтения. Я также пытался Google, если это способ микро-оптимизации JS, но ничего не смог найти.

4b9b3361

Ответ 1

какая наилучшая практика завершения функции JS, если она не вернуть что-нибудь?

Функция возвращает undefined по умолчанию. Поэтому использование return необходимо только в том случае, если вы хотите переопределить поведение по умолчанию.


Почему большинство из них оставляют это, когда они могут

Сообществу Javascript, похоже, не нравится ненужный подробный код. Можно даже сказать, что это спорт, чтобы сделать код коротким и компактным, насколько это возможно.

Почему это не может быть лучшей практикой для всех

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

Однако опытный программист будет иметь такие соображения, глубоко усвоенные и, следовательно, редко нуждаются в таких напоминаниях.

Заключение

Как только вы получаете опыт, спорт для менее подробного кода усиливается, и в этом контексте написание кода, просто подтверждающего поведение по умолчанию, является абсолютным не-go.

Итак: в конечном итоге я бы сказал, что большинство людей заканчивают тем, что оставляют это, и что это оправдано из-за высокой степени интернализации.

Ответ 2

Нет, оператор return не нужен в конце функции void (извините за C-термины там). Однако, если вы хотите выйти из функции раньше (скажем, если определенное условие не было выполнено), вы будете использовать оператор return, даже если вы не возвращаете значение.

Включая оператор return в конце функции void для чтения, должно быть хорошо. Я, честно говоря, не думаю, что это так много добавит к вашей работе.

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

Ответ 3

Просто для удовольствия и FYI я написал небольшой тест script, чтобы попробовать его.

К моему удивлению, тот, у кого есть оператор return, вернулся быстрее, чем тот, у которого около 100 мс около дюжины запусков в Firefox (Gecko). Этот результат был довольно последовательным как на Mac, так и на Ubuntu.

Я также запускал его в Chrome (WebKit), и результаты были намного более неоднозначными, и не было много согласованности.

Это были мои результаты и никоим образом не являются окончательными. Не стесняйтесь попробовать это для себя. На мой взгляд, ваши личные предпочтения более актуальны, чем 100 мс. Если это вам нравится, добавьте его.

function f1(){
    console.log("doing stuff 1");
}

function f2(){
    console.log("doing stuff 2");
    return;
}

var start = (new Date()).getTime();
var i = 1000; while(i--) f1();
var time1 = (new Date()).getTime() - start;

var start = (new Date()).getTime();
var i = 1000; while(i--) f2();
var time2 = (new Date()).getTime() - start;

console.log("Without return: "+time1);
console.log("With return: "+time2);

Здесь скрипка.

Ответ 4

Как заявили другие люди, его не нужно. Но некоторые люди считают это хорошей практикой. особенно когда вы любите быть декларативным, и вы знаете, что оператор return - это не что иное, как инструкция GOTO. (подумайте, что ваше программирование полностью линейно, и вы можете перемещаться только между кодом с метками и операторами goto). Таким образом, вы всегда заявляете, куда идете: вы возвращаетесь.

Еще одна причина возврата void

Например, у вас может быть следующая функция

function login(user, pass){
  if(user === null)
    return;
  doTheRest(user, pass);
}

Таким образом, в методе void вы можете вернуться "рано", чтобы убедиться, что вы не продолжаете, когда условие не выполняется. Это также называется защитным программированием.

Обратите внимание: в большинстве случаев лучше сбросить ошибку throw new Error(...). Таким образом, вы понимаете, что раньше вы забыли согласовать предварительное условие.

Ответ 5

Нет необходимости использовать оператор return, но рекомендуется использовать оператор void, который заставляет ключевое слово функции рассматриваться как выражение вместо объявления.

Но тогда ваша функция должна выглядеть так:

void function (a) {if (a) {setTimeout()}}

Если вы объявляете не-сразу вызываемое выражение функции, вам следует:

  • return true

или

  • return !failure;

Ответ 6

Добавление ненужного оператора return не будет иметь реальных изменений в плане оптимизации. Напишите код для людей, а не компьютеров.

Не нужно, если вы не будете использовать функцию для получения результата (т.е. sum(2, 3)), например:

function xxx(){
  post().then(function(){
    location.href('http://stackoverflow.com');
  }, function(){
    showError();
  });
}

Вы видите, что у меня есть 3 функции, и у всех нет инструкции return, и это просто отлично.

Вводя во мнении, я бы сказал, что вы можете оставить его для своей удобочитаемости и комфорта, но у вас будет отличный подход от большинства программистов. И как меньше (KISS), и если это вообще не нужно, лучше опустить его.

PS: Результат функции без return, естественно, будет undefined.

 function a(param){
   var x = param;
 }
 function b(param){
   var x = param;
   return;
 }
 function c(param){
   var x = param;
   return x;
 }
 a(5); // undefined
 b(5); // undefined
 c(5); // 5