如果if块在JavaScript中返回,是否需要else?

时间:2014-09-13 13:39:37

标签: javascript performance if-statement

我目前正试图从以每秒10次的速率在事件监听器上触发的JavaScript程序中挤出每一毫秒。我试图删除所有残骸。如果if阻止return的唯一目的是else if某事,如果属实,那么使用elseelse跟进是否有任何优势,或者我是否正确思考我放弃了// 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}}

2 个答案:

答案 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:如果您认为我说错了,请纠正我