默认参数
-
传统函数设置默认参数的方法
function sum (num1, num2) {
num1 = num1 || 10; // num1 默认值为10
num2 = num2 || 8; // num2 默认值为8
console.log(num1 + num2);
}
sum(10, 10); //20
sum(); //18
- ES6中函数设置默认参数的方法
function person (name, age = 18) {
console.log(name + '---' + age);
}
person('cez', 21); //cez---21
person('cez', ''); //cez--- (第二个参数为空)
person('zlz'); //zlz---18 (没传递第二个参数,所以使用默认参数)
注意事项
-
使用函数默认参数时,不允许有同名参数。
//不报错
function person (name, name) {
console.log(name);
}
person('cezlz') //undefined
person('cezlz', 21); //21
//报错:Duplicate parameter name not allowed in this context (此上下文中不允许有重复的参数名)
function person (name, name, age=18) {
console.log(name);
}
- 只有在未传递参数,或者参数为 undefined 时,才会使用默认参数,null 值被认为是有效的值传递。
function person (name, age = 18) {
console.log(name + '---' + age);
}
person('cez', 21); //cez---21
person('cez', ''); //cez--- (第二个参数为null,认为有效)
person('zlz'); //zlz---18 (没传递第二个参数,所以使用默认参数)
-
函数参数默认值存在暂时性死区,在函数参数默认值表达式中,还未初始化赋值的参数值无法作为其他参数的默认值。
function a (x, y = x) {
console.log(x, y);
}
a(1); //1 1
a() //undefined undefined
function a (x = y) {
console.log(x);
}
a(1); //1
a(); //报错:y is not defined
function t (x = y, y) {
console.log(x, y);
}
t(); //报错:Cannot access 'y' before initialization (初始化前无法访问“y”)
t(1); //1 undefined
不定参数(延展操作符)
不定参数用来表示不确定参数个数,形如,...变量名,由...加上一个具名参数标识符组成。具名参数只能放在参数组的最后,并且有且只有一个不定参数。
求数值类型的参数之和:
function sum (name, ...arg) {
let result = 0;
console.log(name); //cezlz
for (let value of arg) {
result += value;
}
return result;
}
console.log(sum('cezlz', 1, 10, 3)); //14
console.log(sum('cezlz', 1, 10, 20, 30)); //61
传统函数求参数之和:
function sum () {
let result = 0;
for (let value of arguments) {
result += value;
}
return result;
}
console.log(sum(1, 2, 3)); //6
请多多指教^__^