Js动态传递不定数目的参数

回调程序中,经常有这样的需求:用户传递一个回调方法,该方法可以有不定的参数。

如果参数数目固定则很容易实现,看代码:

    //回调函数1  
     function callback1(a,b,c)  
    {  
alert(a); alert(b
);
    alert(c); }
//回调函数2 function callback2(a,b) { alert(a);
    alert(b); }
//这个方法做了一些操作、然后调用回调函数 function doCallback(fn,args) { if(args.length==2) { fn.call(this,args[0],args[1]) } if(args.length==3) { fn.call(this,args[0],args[1],args[2]) } //假如参数有很多个的话应该怎么写?难道一致if下去吗? } function test() { //动态调用方法、并传递参数 doCallback(callback2,['a','b']); doCallback(callback1,['a','b','c']); }

正确的处理办法:

//回调函数1    
 function callback1(a,b,c)    
{    
 alert(a); alert(
b);
 alert(c); }
//回调函数2 function callback2(a,b) { alert(a);
 alert(b); }
//这个方法做了一些操作然后调用回调函数 function doCallback(fn,args) { fn.apply(this, args); } function test() { doCallback(callback2,['a','b']); doCallback(callback1,['a','b','c']); }

 

 

转载于:https://www.cnblogs.com/zhishan/p/3143741.html

### 参数列表的定义与用法 在编程中,参数列表是指函数或方法声明时用于接收外部输入的一组变量集合。通过参数列表,调用者可以向被调用的函数传递数据,从而实现动态行为。 #### 定义 参数列表通常由零个或多个参数组成,每个参数都有其名称和类型。当函数被调用时,实际传入的值称为实参(arguments),而函数定义中的占位符则被称为形参(parameters)。以下是几种常见语言中参数列表的定义方式: - **C/C++**: 在C/C++中,参数列表可以直接写在函数头部,也可以使用省略号`...`来表示可变参数列表[^1]。例如: ```c void myFunction(int fixedParam, ...); ``` - **Python**: Python支持位置参数、关键字参数以及默认值设定等多种形式的参数列表。还可以利用`*args`和`**kwargs`处理不定数量的位置参数和键值对参数[^2]: ```python def my_function(param1, param2=None, *args, **kwargs): pass ``` - **C#**: C#允许开发者定义带有固定参数、可选参数及params数组的复杂参数列表[^3]。例如: ```csharp public void MyMethod(string requiredParam, int optionalParam = 42, params string[] extraParams) { } ``` #### 用法 参数列表的主要用途在于增强函数的功能性和灵活性。具体来说,可以通过调整参数的数量和种类满足不同的需求场景。下面列举了几种典型的应用模式: 1. **固定参数**: 这是最基本也是最常见的形式,适用于已知确切所需信息的情况。 ```cpp double add(double a, double b); // 声明两个double类型的参数 ``` 2. **可变参数**: 当无法预估需要多少个参数时,采用这种方式非常有用。比如打印日志功能可能涉及任意数目的字段输出[^1]。 ```c #include <stdarg.h> void log_message(const char *format, ...) { va_list args; va_start(args, format); vprintf(format, args); va_end(args); } ``` 3. **缺省参数/可选参数**: 提供一些有合理默认设置的选项给用户选择是否覆盖,默认情况下会自动填充某些特定值[^3]。 ```javascript function greet(name="World") { console.log(`Hello ${name}`); } ``` 4. **解构赋值作为参数**: 特定于JavaScript等现代脚本语言的一种高级特性,可以从对象或者数组里提取属性并映射成独立变量[^2]。 ```javascript const userDisplayInfo = ({ username, avatarUrl }) => {}; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值