微优化:从函数结尾处的内部块返回

问题描述 投票:0回答:2

在使用javascript或lua之类的语言时,默认情况下,所有函数都被视为末尾带有return语句:

function() {
    // do
    return;
}

等于

function() {
    // do
}

我想知道函数结尾处的内部块返回是否会更改内核,编译过程,VM中的任何内容。

function() {
    if (condition) {
        return;
    }

    // end of function
}

同一问题适用于中断循环:

function() {
    for ( loop ) {
        return;
    }

    // end of function
}

当循环中断或条件检查结束时,机器是否“寻找”任何东西?

这不是样式问题,请不要告诉我使代码可读。

javascript lua micro-optimization
2个回答
0
投票

通常不,函数中间的return与最后达到隐式返回的效率没有根本上的不同或更高或更低。

将代码重构为循环外的break并到达函数底部的隐式return效率不高(但在某些解释语言中可能很容易less效率,尤其是如果它们不是't JITed。)


0
投票

我不确定我是否正确理解了您的问题,但是我会尝试从我的角度回答。

在函数声明末尾的return语句指示退出函数并且不返回任何内容(void)。如果省略return语句,则实际执行函数后将不会发生任何事情。因此,我认为您声明的两个函数的行为方式不同:

function a() {
    // executes until the following statement and then breaks
    return;
}

function b() {
    // executes all statements and afterwards leaves the context where it was called
}

关于条件检查或循环之类的内部块的问题,我猜这些语句只能由解析器以某些方式“优化”,如果它们包含数字或字符串之类的静态值。一旦出现诸如变量之类的动态值,就不可能对任何内容进行优化或从内部result语句中受益。

希望您能得到我的解释。

© www.soinside.com 2019 - 2024. All rights reserved.