在使用javascript或lua之类的语言时,默认情况下,所有函数都被视为末尾带有return
语句:
function() {
// do
return;
}
等于
function() {
// do
}
我想知道函数结尾处的内部块返回是否会更改内核,编译过程,VM中的任何内容。
function() {
if (condition) {
return;
}
// end of function
}
同一问题适用于中断循环:
function() {
for ( loop ) {
return;
}
// end of function
}
当循环中断或条件检查结束时,机器是否“寻找”任何东西?
这不是样式问题,请不要告诉我使代码可读。
通常不,函数中间的return
与最后达到隐式返回的效率没有根本上的不同或更高或更低。
将代码重构为循环外的break
并到达函数底部的隐式return
效率不高(但在某些解释语言中可能很容易less效率,尤其是如果它们不是't JITed。)
我不确定我是否正确理解了您的问题,但是我会尝试从我的角度回答。
在函数声明末尾的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
语句中受益。
希望您能得到我的解释。