es6之函数扩展

默认值

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
}

 

posted @ 2021-02-03 23:30  sunmarvell  阅读(44)  评论(0编辑  收藏  举报