JavaScript实现参数可选择的几种方式的总结

问题描述:

在JavaScript语言中如果使用默认参数或者要使用可变参数个数会出现以下问题:

//定义
function testArgs(optionalParam1,optionalParam2,stableParam1=0,stableParam2=10){
    console.log(optionalParam1,optionalParam2,stableParam1,stableParam2)    
}

//调用
testArgs();//可选参数undefined,重要参数使用默认值,输出  undefined undefined 0 10
testArgs(stableParam1=1,stableParam2=20) //es5没有关键字传参,输出  1 20 0 10

为解决以上问题,可以有如下几种做法:

1.ES6解构

          ES6允许按照一定的模式从数组或者对象中提取值对变量赋值,此为解构,如果解构失败,变量值为undefined。

/*
*使用es6解构
*/
//定义
function testArgs({optionalParam1,optionalParam2,stableParam1=0,stableParam2=10}={}){
    console.log(optionalParam1,optionalParam2,stableParam1,stableParam2)    
}

//调用
testArgs();//输出  undefined undefined 0 10
testArgs({stableParam1:1,stableParam2:20}) //输出 undefined undefined 1 20

2.对象传值(与解构相似,只不过参数解析不一样)

/*
*使用对象传值,根据判断值是否为undefined,完成默认赋值
*/
//定义
function testArgs(obj){
    obj.stableParam1 = obj.stableParam1  || 0;
    obj.stableParam2= obj.stableParam2|| 10;
    console.log(obj.optionalParam1,obj.optionalParam2,obj.stableParam1,obj.stableParam2)    
}

//调用
testArgs();//无法输出,报错
testArgs({stableParam1:1,stableParam2:20}) //输出 undefined undefined 1 20


//大致思路如此,但是在不传递参数的时候,obj中的内容为undefined,obj.undefined会报错

3.柯里化

          柯里化是指将使用多个参数的函数转换成一系列使用一个参数的函数的技术。从而达到函数只运行一次的效果。

          可以根据实际情况决定哪些参数是不容易改变的,哪些参数是比较容易变动的。

/*
*使用函数柯里化
*/
//定义
function testArgsDetail(optionalParam1,optionalParam2,stableParam1,stableParam2){
    console.log(optionalParam1,optionalParam2,stableParam1,stableParam2)    
}
function testArgs(stableParam1=0,stableParam2=10){
    return (optionalParam1,optionalParam2) =>     
           testArgsDetail(optionalParam1,optionalParam2,stableParam1,stableParam2)
}

//调用,temp相当于是stableParam1=0,stableParam2=10的句柄
temp = testArgs();

temp();     //输出  undefined undefined 0 10
temp("可选参数1","可选参数2")  //输出 可选参数1 可选参数2 0 10

temp = testArgs(1,20);
temp();     //输出 undefined undefined 1 20
temp("可选参数1","可选参数2")  //输出 可选参数1 可选参数2 1 20


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值