zoukankan      html  css  js  c++  java
  • es6中的函数参数

    es5中默认参数写法与es6中默认参数写法

    es6之前采用变通方法

    function f(x, y, z) {
          y=y||7;
          z=z||42;
            return x + y + z;
        }
    console.log(f(1));    //50

    console.log(f(1,"",0));    //50

    存在问题:这种写法缺点 如果y参数有没有赋值,如果没有,则指定默认值7,如果y赋值了  但是对应的布尔值为false,则该赋值不起作用

    如果传入为0时 判断时布尔值为false    结果还是50


    function f(x, y, z) {
    y=y||7;
    z=z||42;
    return x + y + z;
    }
    console.log(f(1,0,0));          //50



    // es5的写法
    {
        function f(x, y, z) {
            if (y === undefined) {
                y = 7;
            }
            if (z === undefined) {
                z = 42;
            }
            return x + y + z;
        }
        console.log(f(1));
    }
    // es6的写法
    {
        function f1(x, y = 4, z = 12) {
            return x + y + z;
        }
        console.log(f1(1));
    }

     除了简洁,es6写法还有两个好处 阅读代码的人可以立刻一是到那些参数是可以省略的,不用查看函数体或文档  其次  有利于将来代码优化  及时未来的版本彻底拿到这个参数,也不会导致以前代码无法运行

    参数变量是默认声明的  所以不能用let  const再次声明


    es6中默认参数名称不能重复(不可有重名)

    es6中参数的默认值一定要放在参数最后  因为实参和形参是通过顺序一一对应的


    与解构赋值默认值结合使用

     

     

     解构赋值的时候  两边解构形式要完全匹配

     function ajax(url,{
       body="",
       method="GET",
       headers={}
       }={}){
       console.log(method);
     }
    
    ajax("www.baidu.com")

    输出   :"GET"

     function ajax(url,{
       body="",
       method="GET",
       headers={}
       }){
       console.log(method);
     }
    
    ajax("www.baidu.com")

    输出: 因为没有为对象赋值默认值


    函数lenght属性  返回没有指定默认值参数的个数 这是因为length属性的含义是该杉树预期传入的参数个数,默认参数指定默认值以后,预计传入的参数个数就不包括这个参数了,通理  rest参数也不会计入length属性

    函数参数生成作用域   一定设置了参数的默认值  函数进行声明初始化时,参数会形成一个单独的作用域(context)等到初始化结束  这个是作用域就会消失

     

     

     返回昵称名字  anonymous:匿名

     

     
  • 相关阅读:
    仓储模式Repository
    jwt测试
    net core webapi jwt
    net core发布到iis遇到的困难
    新的目标
    L9-2.安装mysql数据库
    L9-1-安装Apache
    L8_2
    Linux 08
    Linux 07 故障恢复
  • 原文地址:https://www.cnblogs.com/ddqyc/p/13587929.html
Copyright © 2011-2022 走看看