我时不时地使用switch语句。我经常发现自己想在函数中使用return语句。我想知道以这种方式编写的switch语句是否仍然是尾部调用优化的。
function misc(x) {
switch(true){
case x > 1:
return misc(x-1);
break;
default:
return;
}
}
需要更改什么才能使case x
注意:我知道大多数主流浏览器的JavaScript都不支持尾部调用优化。我只是想知道,无论当前浏览器是否支持,上面的代码是否与尾部调用优化兼容。
ES6中的尾部调用优化要求仅取决于函数调用是否处于尾部位置,也就是说,函数是否是返回之前执行的最后一件事。
就您而言:
return misc(x-1);
将misc()
置于尾部位置。因此,可以对尾部调用进行优化。
如果你做了这样的事情,就不会发生这种情况:
return 1 + misc(x-1);
那是因为它相当于:
var tmp = misc(x-1);
tmp = 1 + tmp;
return tmp;
这意味着misc()
将不在尾部位置。
因此,当开关处于尾部位置时,返回是否处于if
或
中无关紧要,只要函数处于尾部位置,就可以对尾部调用进行优化。
我不得不使用全局变量found来指示在哪里找到了一个和。返回语句始终未定义。 此外,如果在下面的if语句中使用return语句,代码将无法正常工作。 这不是问题的最佳解决方案,但这是我得到的工作版本。 返回语句之间的****,删除时代码工作,否则我要么得到false或未定义。我不明白这部分!为什么删除返回就能解决问题,我认为每个递归调用都必须用返回语句进行。 问题可能是由于多次呼叫造成的吗?我是不
switch 语句可以替代多个 if 判断。 switch 语句为多分支选择的情况提供了一个更具描述性的方式。 语法 switch 语句有至少一个 case 代码块和一个可选的 default 代码块。 就像这样: switch(x) { case 'value1': // if (x === 'value1') ... [break] case 'value2':
使用 switch 语句可以更简洁地实现 if ~ else if 的结构。格式如下。 switch(base_expression) { casecondition_expression1: casecondition_expression2: : : default: : : } 写在 base_expression 位置的表达式会在刚开始时被求值。switch 后面的语句块中的 case
问题内容: PostgreSQL 9.1 经营状况 每个月,都会为特定的流程分配一批新的帐户。可以按月份,帐户数和帐户总余额来描述每批。该过程的目标是从客户那里收回一些余额。然后每月分别跟踪每个批次(自将批次转移到流程以来,每个月回收的金额)。 目标 我的目标是预测将来将回收多少。 资料定义 样本数据 计算过程 您可以将数据想象成一个三角形矩阵(将预测X值): 算法 我的目标是预测所有遗漏的点(未
C# 中的 switch 语句有些类似于《 if else if 语句》,都可以根据表达式执行某个的语句块,其语法格式如下: switch(表达式){ case value1: //表达式的值为 value1 时,要执行的代码 break; case value2: //表达式的值为 value2 时,要执行的代码 break;
当条件判断分支太多的时候,我们会使用switch语句来优化逻辑。 package main import "fmt" import "time" func main() { // 基础的switch用法 i := 2 fmt.Print("write ", i, " as ") switch i { case 1: fmt.Println("