小张和js函数参数默认值
程序员文章站
2022-03-27 13:09:44
...
函数参数默认值
先来个例子
- 允许为函数的参数设置默认值,即直接定义在参数的后面
function fun(x="hello"){
console.log(x);
}
fun();//hello
fun("hi");//hi
- 参数变量是默认声明的,所以不能用
let
或const
再次声明
function fun(x=0){
let x=1;//报错
const x=1;//报错
}
- 使用参数默认值时,不能有同名参数
function fun1(x,x,y){//不会报错
...
}
function fun2(x,x,y=0){//会报错
...
}
- 参数默认值可以和解构赋值的默认值,结合起来使用
function fun({x=0,y}){
console.log(x,y);
}
fun({});//0,undefined
fun({y:1});//0,1
fun({x:2,y:1});//2,1
fun();//报错
如何能让fun()不报错呢
function fun({x=0,y}={}){
console.log(x,y);
}
fun();//0,undefined
- 如果非尾部的参数设置默认值,实际上这个参数是没法省略的
function f(x=1,y){
return [x,y];
}
f();//[1,undefined]
f(2);//[2,undefined]
f(,1);//报错
f(undefined,1);//[1,1]
//传入undefined,触发该参数等于默认值,null没有这个效果
- 制定了默认值后,函数的
length
属性,将返回没有指定默认值的参数个数,也就是指定了默认值后,length
属性失效
(function (a){}).length //1
(function (a=1){]).length //0
(function (a,b,c=5){}).length//2
- 如果默认值的参数不是为参数,那么
length
属性也不再计入后面的参数了
(function (a=0,b,c){}).length //0
(function (a,b=1,c){}).length //1