默认值
let defaultA=(x,y=5,c)=>(x+y+c) console.log(defaultA(1,2,3));//6 console.log(defaultA(1,2));//NaN
let defaultA=(x,y,c=4)=>(x+y+c) console.log(defaultA(1,2));//7
有默认值的作用域
一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值,是不会出现的。
这段话主要state了3个事实:
①函数参数有默认值时,会在声明初始化阶段形成一个单独的作用域
②这个作用域在初始化结束后消失
③没默认值的情况下,没有①②的现象发生。
function f1(x,y=x){console.log(x,y)}; f1(1);//1 1 f1(1,2);//1 2 f1();//undefined undefined
function f1(x,y=cc){console.log(x,y)}; f1(1,2); //1 2 f1(1);//报错 cc is not defined let cc=1; f1(1);//1 1 f1();//undefined 1
https://www.cnblogs.com/surfer/p/10195153.html
rest参数
(形式为...变量名
),用于获取函数的多余参数,这样就不需要使用arguments
对象了。
function restDemo(...values) { var sum = 0; for (let v of values) { sum += v; } return sum; } console.log(restDemo(1,2,3));
rest 参数必须是最后一个参数,否则会报错
function f(a, ...b, c) { // ... } console.log(f(1, 2, 3));//报错Uncaught SyntaxError: Rest parameter must be last formal parameter
rest参数是数组
function f(a, ...b) { // ... console.log(b);//Array(2) } f(1, 2, 3);
函数的length
属性,不包括 rest 参数
function f(a, ...b) { // ... } console.log(f.length); //1
...应用
console.log(...[1,2,4])//1 2 4 console.log(4,...[1,2,3])//4 1 2 3
箭头函数
()=》{}
当函数体只有一行时,可以简化为 x=>x , 其相当于function(x){return x;}
(x,y)=>x+y 其相当于function(x+y){return x+y;}
let func=x=>{x=x+2;x=x+3;} func(1);//执行不会有任何结果,因为多行,没有返回值 //正确操作 func=x=>{x=x+2;x=x+3; return x;} func(1); //6 多行需要主动return
伪调用
{ function tail(x){ console.log('tail',x); } function fx(x){ return tail(x) } fx(123) //tail 123 }