如果JS函数没有返回任何内容,那么完成JS函数的最佳做法是什么?
function (a) {if (a) {setTimeout()} return;}
在这种情况下,“返回”是不必要的,但为了便于阅读,我将其留下。如果这是一种微观优化JS的方法,但我也试图谷歌,但是却找不到任何东西。
答案 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);
答案 3 :(得分:2)
正如其他人所说,没有必要。但有些人认为这是一种很好的做法。特别是当你喜欢声明并且你知道return语句只不过是一个GOTO
语句。 (想想你的编程是完全线性的,你只能在带有标签和goto语句的代码之间移动)。通过这种方式,你总能宣告你要去的地方:你要回去了。
例如,您可以使用以下功能
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
的情况。