我目前正试图从以每秒10次的速率在事件监听器上触发的JavaScript程序中挤出每一毫秒。我试图删除所有残骸。如果if
阻止return
的唯一目的是else if
某事,如果属实,那么使用else
或else
跟进是否有任何优势,或者我是否正确思考我放弃了// with else
function withElse () {
if (foo) {
return foo;
} else if (bar) {
return bar;
} else {
return baz;
}
}
// without else
function withoutElse () {
if (foo) return foo;
if (bar) return bar;
return baz;
}
。
例如
{{1}}
答案 0 :(得分:4)
不,没有。你可以选择明白它,但它不是必需的(你可以选择不来避免冗余;它完全是一种风格选择)。
(同样,您可以选择始终使用区块 - {...}
- 为清晰起见,但也不需要。)
从性能角度来看,这些都不重要。
需要考虑第三种选择:
function withElse () {
var rv;
if (foo) {
rv = foo;
} else if (bar) {
rv = bar;
} else {
rv = baz;
}
return rv;
}
更详细,但它的优点是函数退出单个位置,这对调试很有用。当然,它的缺点是......更加冗长。 : - )
在简单的引擎上,第三种选择可能会有微小的,微小的性能损失;在现代浏览器中的优化引擎上,我非常怀疑它。
答案 1 :(得分:0)
回答你的问题,两个程序之间没有区别,如果你愿意,你可以把它留下来。
但是,正如@torazaburo所说" else
在编译时需要花费一两微秒的时间"。但是,据我所知,它在运行时没有任何区别,所以即使你每秒1000x调用这个函数你也不会优化任何东西。
if (foo) {
return foo;
} else if (bar) {
return bar;
} else {
return baz;
}
将(通过一个愚蠢的编译器)编译成这样的东西(但在汇编中):
1. ifnot (foo) goto line 4;
2. return foo;
3. goto line 9;
4. ifnot (foo) goto line 7;
5. return foo;
6. goto line 9;
7. ifnot (foo) goto line 9;
8. return foo;
9.
反对:
if (foo) return foo;
if (bar) return bar;
return baz;
那将是:
1. ifnot (foo) goto line 3;
2. return foo;
3. ifnot (foo) goto line 5;
4. return foo;
5. ifnot (foo) goto line 7;
6. return foo;
7.
性能是一样的! (我也更喜欢第二个的可读性!)
Ps:如果您认为我说错了,请纠正我