ES6函数扩展

本文只是学习es6的一些简单笔记,详情请看阮一峰的es6入门

关于函数参数的默认值
  • 什么时候需要为函数参数设置默认值?
    答:该参数可以省略不传的时候。(为函数参数设置默认值就意味着该参数可以省略)。所以通常情况下,应该为函数的尾参数设置默认值。如果非尾部的参数设置默认值,实际上这个参数是没法省略的。
  • ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。
    function log(x, y = 'World') {
      console.log(x, y);
    }
    
  • 参数变量是默认声明的,所以在函数体中不能用let或const再次声明。
  • 使用参数默认值时,函数不能有同名参数。
  • 参数默认值是惰性求值的。
关于rest参数
  • 定义
    ES6 引入 rest 参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
  • 注意
    rest 参数之后不能再有其他参数(即只能是最后一个参数)
关于严格模式

只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。解决方法有两种。

  1. 设定全局性的严格模式。
  2. 把函数包在一个无参数的立即执行函数里面。
关于箭头函数
  • 语法描述
    ES6 允许使用“箭头”(=>)定义函数。=>之前的为函数参数,用一个圆括号代表参数部分;之后的为函数体,用一个大括号代表函数体部分。当然,如果只有一个参数,圆括号可以省略;如果函数体只有一条语句,可以省略大括号。建议圆括号和大括号都不要省略,以免造成一些不可预料的错误。
    var f = v => v;
    var sum = (num1, num2) => num1 + num2;
    
  • 注意事项
    1. 不可以当作构造函数,也就是说,不可以使用new命令。
    2. 不可以使用arguments对象,该对象在函数体内不存在。
    3. 不能用作 Generator 函数。
    4. 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
关于函数属性
  • length属性
    函数的length属性,将返回没有指定默认值的参数个数。更准确的说应该返回指定默认值的参数之前的参数个数。也就是说,从指定了默认值的参数及该参数之后的参数都不计入length属性当中。除此之外,length属性也不包括 rest 参数。
    function log(x, y = "World") {
      console.log(x, y)
    }
    console.log(log.length)   //1
    
    function foo(x, y = "World", z) {
      // ...
    }
    console.log(foo.length)  //1
    
    function fun(x, ...z) {
      console.log(x, ...z)
    }
    console.log(fun.length)    //1
    
  • name属性
    函数的name属性,返回该函数的函数名。bind返回的函数,name属性值会加上bound前缀。
    function foo() {
      // ...
    }
    console.log(foo.name)    //foo
    console.log(foo.bind({}).name)    //bound foo
    
关于函数绑定运算符
  • 用途
    用来取代call、apply、bind调用。
  • 语法
    函数绑定运算符是并排的两个冒号(::),双冒号左边是一个对象,右边是一个函数。
    该运算符会自动将左边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。
    如果双冒号左边为空,右边是一个对象的方法,则等于将该方法绑定在该对象上面。
    foo::bar          // 等同于   bar.bind(foo)
    ::console.log       // 等同于  console.log.bind(console);
    
    原文作者:tiancai啊呆
    原文地址: https://www.jianshu.com/p/6b235269531b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞