JS函数的最后一行是否需要'return'?

时间:2016-10-19 19:33:43

标签: javascript

如果JS函数没有返回任何内容,那么完成JS函数的最佳做法是什么?

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

在这种情况下,“返回”是不必要的,但为了便于阅读,我将其留下。如果这是一种微观优化JS的方法,但我也试图谷歌,但是却找不到任何东西。

7 个答案:

答案 0 :(得分:12)

  

如果没有完成JS功能的最佳做法是什么   什么都归还?

默认情况下,函数返回undefined。因此,如果您要覆盖默认行为,则return的使用仅为必需

为什么大多数人在可以

时将其排除在外

Javascript社区似乎不喜欢不必要的详细代码。甚至可以说这是一项让代码尽可能短而紧凑的运动。

为什么这可能不是所有

的最佳做法

总是使用return的习惯可以提醒函数总是返回,从而提醒您反思默认行为是否应该被覆盖。

然而,有经验的程序员会将这些考虑因素深深地内化,因此很少需要这样的提醒。

<强>结论

随着人们获得经验,这项运动减少了冗长的代码,并且在这种情况下编写代码只是确认默认行为是绝对禁止的。

所以:从长远来看,我会说大多数人最终会把它排除在外,因为内部化程度很高,这样做是合理的。

答案 1 :(得分:7)

不,在void函数结束时不需要return语句(对不起那里的C-terms)。但是,如果您想提前退出某个函数(例如,如果未满足特定条件),那么即使您没有返回值,也会使用return语句。

为了便于阅读,在void函数的末尾包含一个return语句应该没问题。老实说,我不认为这样做会增加你的足迹。

在我看来,但是,您不应该在不返回任何内容的函数末尾包含return语句。

答案 2 :(得分:3)

只是为了好玩而且仅供参考我写了一个小基准脚本来试试。

令我惊讶的是,带有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);

Here's a fiddle.

答案 3 :(得分:2)

正如其他人所说,没有必要。但有些人认为这是一种很好的做法。特别是当你喜欢声明并且你知道return语句只不过是一个GOTO语句。 (想想你的编程是完全线性的,你只能在带有标签和goto语句的代码之间移动)。通过这种方式,你总能宣告你要去的地方:你要回去了。

返回void的另一个原因

例如,您可以使用以下功能

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

这种方法在虚空方法中你可以早期返回。确保在没有条件时你不要继续。这也称为防御性编程。

注意:大部分时间你最好抛出错误throw new Error(...)。通过这种方式,您可以在早些时候意识到忘记匹配前置条件。

答案 4 :(得分:2)

添加不必要的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

答案 5 :(得分:1)

不需要使用return语句,但最好使用void运算符强制将function关键字视为表达式而不是声明。

但是你的功能看起来应该是这样的:

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

如果声明一个非立即调用的函数表达式,则应该:

  • return true

  • return !failure;

答案 6 :(得分:0)

Arrow functions(搜索Remove the body brackets and word "return" -- the return is implied),它的主体是一行并且没有花括号,即使对于非return函数,也不需要void语句。例子。

var returnTest = () => 1 + 1;
returnTest(); // Outputs 2

var returnTest2 = () => { 1 + 1};
returnTest2(); // Outputs undefined

AFAIK和void函数除外,这是唯一可以省略return的情况。