本关任务:根据要求调用不同的函数。 相关知识 函数的调用 在实训四中,我们曾经介绍过对象可以有自己的方法,当然这也是函数。这种函数的调用和前面两关定义的函数有细小的区别。 //函数的定义:求三个数的最大值 function max(a,b,c) { if(a > b) { if(a > c) return a; else return c; } else { if(b > c) return b; else return c; } } //调用该函数 var result = max(1,2,3);//result为3 console.log(result);//输出3 调用函数的时候,需要传入和形参相同个数的的具体值,上面的函数有3个参数,所以下面调用的时候传入3个具体的值,1传给参数a,2传给参数b,3传给参数c。函数的返回值通过赋值符号=传给了变量result。如果函数体内没有return关键字,将返回undefined。 再来看一下对象里定义的函数的调用: var ob = { id:1, getMax:function(a,b) { return a>b?a:b; } }; var result = ob.getMax(2,1);//result值为2 var result1 = ob["getMax"](2,1);//result1的值也是2 与上面的区别是,这里要定位到函数,需要使用对象名.函数名或者对象名["函数名"],其它相同。 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: mainJs()代码区上面定义了三个函数,从上到下分别编号为1、2和3; mainJs()有三个参数a、b和c,根据a的值(函数的编号,可取的值是1、2和3)调用相应的函数(可选的函数分别是getMax()、getMin()和getSum(),具体请参考代码!),并传入参数b和c,返回得到的结果; 比如a为1表示你需要调用函数getMax(); 具体请参见后续测试样例。 测试说明 测试过程: 平台将读取用户补全后的FunctionCall.js; 调用其中的mainJs()方法,并输入若干组测试数据; 接着根据测试结果输出判断程序是否正确。 以下是测试样例: 测试输入: 1,22,33 预期输出:
时间: 2025-06-25 16:27:06 浏览: 11
### 解题思路与代码实现
#### 题目分析
我们需要根据参数 `a` 的值(即函数编号)动态选择调用对应的函数,并传递参数 `b` 和 `c`,最后返回对应的结果。
已知条件:
- 函数编号 `a` 为 `1` 表示调用 `getMax()`;
- 函数编号 `a` 为 `2` 表示调用 `getMin()`;
- 函数编号 `a` 为 `3` 表示调用 `getSum()`。
目标:
编写一个函数 `mainJs(a, b, c)` 根据输入的 `a` 值调用不同的函数。
---
### 实现步骤
1. **明确各函数功能**:
- `getMax(b, c)` 返回两个数中的较大值。
- `getMin(b, c)` 返回两个数中的较小值。
- `getSum(b, c)` 返回两个数的和。
2. **逻辑分支设计**:
使用简单的 `if...else` 或者 `switch...case` 结构来根据不同编号调用相应函数。
3. **返回结果**:
根据选定的函数计算结果并返回。
---
### 最终代码
```javascript
// 已经定义好的三个函数
function getMax(x, y) {
return x > y ? x : y;
}
function getMin(x, y) {
return x < y ? x : y;
}
function getSum(x, y) {
return x + y;
}
// mainJs() 主函数
function mainJs(a, b, c) {
let result;
switch (a) { // 根据a的不同值选择不同函数
case 1: // 调用 getMax()
result = getMax(b, c);
break;
case 2: // 调用 getMin()
result = getMin(b, c);
break;
case 3: // 调用 getSum()
result = getSum(b, c);
break;
default:
throw new Error("Invalid function number!"); // 抛出错误提示非法编号
}
return result; // 返回最终结果
}
// 测试示例
console.log(mainJs(1, 22, 33)); // 输出 33 (调用 getMax)
console.log(mainJs(2, 22, 33)); // 输出 22 (调用 getMin)
console.log(mainJs(3, 22, 33)); // 输出 55 (调用 getSum)
```
---
### 程序解析
1. **函数映射规则**:
- 当 `a === 1`,调用 `getMax(b, c)`;
- 当 `a === 2`,调用 `getMin(b, c)`;
- 当 `a === 3`,调用 `getSum(b, c)`。
2. **异常处理**:
如果传入的 `a` 不在范围 `[1, 3]` 内,则抛出错误信息 `"Invalid function number!"`。
3. **返回值机制**:
函数的返回值由调用的目标函数(`getMax`、`getMin` 或 `getSum`)决定,主函数 `mainJs` 直接将该结果作为输出。
---
### §相关问题§:
1. **如果不使用 `switch...case`,还有其他方法实现吗?**
可以使用数组存储函数引用的方式替代 `switch...case`,例如:
```javascript
const funcs = [null, getMax, getMin, getSum];
result = funcs[a](b, c); // 动态调用函数
```
2. **如何让代码更具扩展性?**
当需要增加更多函数时,可以在 `funcs` 数组中添加新的函数引用,而无需修改现有的业务逻辑。
3. **如果参数超过两个怎么办?**
如果某些函数需要接收更多的参数,可以调整为目标函数接受不定长参数(如使用 ES6 的剩余参数语法 `...args`),并在调用时动态展开。
阅读全文
相关推荐

















