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

mlnl4t2r  于 2023-01-29  发布在  Java
关注(0)|答案(7)|浏览(158)

如果一个JavaScript函数不返回任何东西,那么结束它的最佳实践是什么?

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

    return;
}

在这种情况下,return是不必要的,但我离开它的可读性的目的。我也试图谷歌,如果这是一种方式来微优化JS,但无法找到任何东西。

pgvzfuti

pgvzfuti1#

如果JS函数不返回任何东西,那么结束它的最佳实践是什么?
一个函数默认返回undefined,因此只有当你想覆盖默认行为时才需要使用return

    • 为什么大多数人都能忘记**

Javascript社区似乎不喜欢不必要的冗长代码,甚至可以说,使代码尽可能简短紧凑是一种运动。

    • 为什么这可能不是所有人的最佳实践**

总是使用return的习惯可以作为一个很好的提醒,一个函数 * 总是返回一些东西 *,从而提醒你考虑是否应该覆盖默认行为。
然而,一个有经验的程序员会把这些考虑因素深深地内化,因此很少需要这样的提醒。

    • 结论**

随着经验的积累,对更简洁代码的追求会越来越强烈,在这种情况下,编写代码只是确认默认行为是绝对行不通的。
所以:从长远来看,我想说大多数人最终会把它排除在外,这样做是合理的,因为它的高度内化。

mnemlml8

mnemlml82#

不,在void函数的末尾不需要return语句(抱歉这里使用了C术语),但是,如果你想提前退出函数(比如说,如果没有满足特定条件),那么你将使用return语句,即使你没有返回值。
在void函数的末尾包含一个return语句以提高可读性应该没问题,但老实说我不认为这样做会增加太多内存占用。

然而,在我看来,你不应该在一个不返回任何东西的函数的末尾包含一个return语句。

gr8qqesn

gr8qqesn3#

只是为了好玩和FYI我写了一个小的基准脚本来尝试它。
令我惊讶的是,在Firefox(Gecko)上运行了十几次之后,有return语句的程序比没有return语句的程序返回的速度快了100毫秒,这一结果在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.

p5fdfcr1

p5fdfcr14#

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

除了void函数之外,这是唯一可以省略return的示例。

zwghvu4y

zwghvu4y5#

添加一个不必要的return语句不会对优化产生任何真实的的影响。为人类而不是计算机编写代码。
如果不使用函数来获取结果(即sum(2, 3)),则不需要,例如:

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

你看我有3个函数,都没有return语句,就这样。
进入opinion lands,我会说你 * 可以 * 为了你的可读性和舒适度而离开它,但你会有一个不同于大多数程序员的方法。因为越少越好(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
k2fxgqgv

k2fxgqgv6#

正如其他人所说,这是不必要的。但有些人认为这是一个很好的实践。特别是当你喜欢声明性,你知道return语句实际上只不过是一个GOTO语句。(想象一下你的编程是完全线性的,你只能在带有标签的代码和后藤语句之间移动)。这样你就可以总是声明你要去哪里:你得回去。

返回void的另一个原因

例如,您可以使用以下函数

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

这样,在void方法中,你可以返回“early”,以确保在条件不成立时你不会继续,这就是所谓的防御性编程。
注意:大多数时候你最好抛出一个错误throw new Error(...),这样你就能更早地意识到你忘记了匹配一个前置条件。

t9aqgxwy

t9aqgxwy7#

不需要使用return语句,但使用void运算符是一种很好的做法,它强制将function关键字视为表达式而不是声明。
但是函数应该如下所示:

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

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

  • return true

  • return !failure;

相关问题