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);
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
7条答案
按热度按时间pgvzfuti1#
如果JS函数不返回任何东西,那么结束它的最佳实践是什么?
一个函数默认返回
undefined
,因此只有当你想覆盖默认行为时才需要使用return
。Javascript社区似乎不喜欢不必要的冗长代码,甚至可以说,使代码尽可能简短紧凑是一种运动。
总是使用return的习惯可以作为一个很好的提醒,一个函数 * 总是返回一些东西 *,从而提醒你考虑是否应该覆盖默认行为。
然而,一个有经验的程序员会把这些考虑因素深深地内化,因此很少需要这样的提醒。
随着经验的积累,对更简洁代码的追求会越来越强烈,在这种情况下,编写代码只是确认默认行为是绝对行不通的。
所以:从长远来看,我想说大多数人最终会把它排除在外,这样做是合理的,因为它的高度内化。
mnemlml82#
不,在void函数的末尾不需要
return
语句(抱歉这里使用了C术语),但是,如果你想提前退出函数(比如说,如果没有满足特定条件),那么你将使用return
语句,即使你没有返回值。在void函数的末尾包含一个return语句以提高可读性应该没问题,但老实说我不认为这样做会增加太多内存占用。
然而,在我看来,你不应该在一个不返回任何东西的函数的末尾包含一个return语句。
gr8qqesn3#
只是为了好玩和FYI我写了一个小的基准脚本来尝试它。
令我惊讶的是,在Firefox(Gecko)上运行了十几次之后,有return语句的程序比没有return语句的程序返回的速度快了100毫秒,这一结果在Mac和Ubuntu上都非常一致。
我也在Chrome(Webkit)上运行了它,结果更加模糊,根本没有太多的一致性。
这些是我的结果,并不是绝对的。你可以自己试试。在我看来,你的个人喜好比100毫秒更重要。如果你是这样做的,那就加上它。
Here's a fiddle.
p5fdfcr14#
Arrow functions(搜索
Remove the body brackets and word "return" -- the return is implied
),其主体是单行并且没有花括号,不需要return
语句,即使对于非void
函数也是如此。示例。除了
void
函数之外,这是唯一可以省略return
的示例。zwghvu4y5#
添加一个不必要的
return
语句不会对优化产生任何真实的的影响。为人类而不是计算机编写代码。如果不使用函数来获取结果(即
sum(2, 3)
),则不需要,例如:你看我有3个函数,都没有
return
语句,就这样。进入opinion lands,我会说你 * 可以 * 为了你的可读性和舒适度而离开它,但你会有一个不同于大多数程序员的方法。因为越少越好(KISS),如果它根本没有必要,最好省略它。
PS:没有
return
的函数的结果自然是undefined
。k2fxgqgv6#
正如其他人所说,这是不必要的。但有些人认为这是一个很好的实践。特别是当你喜欢声明性,你知道return语句实际上只不过是一个
GOTO
语句。(想象一下你的编程是完全线性的,你只能在带有标签的代码和后藤语句之间移动)。这样你就可以总是声明你要去哪里:你得回去。返回void的另一个原因
例如,您可以使用以下函数
这样,在void方法中,你可以返回“early”,以确保在条件不成立时你不会继续,这就是所谓的防御性编程。
注意:大多数时候你最好抛出一个错误
throw new Error(...)
,这样你就能更早地意识到你忘记了匹配一个前置条件。t9aqgxwy7#
不需要使用
return
语句,但使用void
运算符是一种很好的做法,它强制将function关键字视为表达式而不是声明。但是函数应该如下所示:
如果声明非立即调用的函数表达式,则应:
return true
或
return !failure;