ES6——函数

  • 参数扩展

    • 默认参数

      function fn(name,age=1){
          console.log(name+","+age)
      }
      fn("Amy",18)	//Amy 18
      fn("Amy",)		//Amy
      fn("Amy")		//Amy 1
      

      注:

      1. 使用默认参数,不允许同名参数
      2. 只有在未传递参数或参数为 undefined 时,才使用默认参数, null 值是有效的值传递
    • 不定参数

      function f(...values){
          console.log(values.length)
      }
      f(1,2)		//2
      
  • 箭头函数

    更加简洁的函数书写形式

    参数 => 函数体
    
    • 基本用法

      let f = v=>v
      //等价于
      let f = function(v){
          return v
      }
      f(1)	//1
      

      没有参数时或有多个参数时,用 () 括起来

      var f=(a,b)=>a+b
      var f=()=>1
      

      函数体多行语句时,用 {} 括起来,一行语句 {} 可省略

      返回对象时,为区分代码块,用 () 将对象括起来

      var f=(id,name)=>({id:id, name:name})
      

      注:箭头函数没有 this、super、arguments、new.target的绑定

    • this

      • 普通函数
        1. this 总是代表着函数的直接调用者
        2. 默认情况下,没有直接调用者,this -> window
        3. call,apply,bind 可以绑定 this
      • 箭头函数
        1. 指向上下文对象(父级作用域)的 this 指向——指向最近的函数的 this 指向
        2. 偶尔没有上下文对象则指向 window
        3. apply、call、bind 无法改变箭头函数的 this 指向
      var Person = {
          age: 18,
          sayHello: function(){
              setTimeout(function(){
                  console.log(this.age)
              })
          }
      }
      var age = 20
      Person1.sayHello()	//20,setTimeOut的匿名函数没有直接调用者,this 指向 window
      var Person1 = {
          age: 18,
          sayHello: function(){
              setTimeout(()=>{
                  console.log(this.age)
              })
          }
      }
      var age = 20
      Person1.sayHello()	//18,指向 sayHello() 的 this
      
      
      var Person = {
          age:18,
          sayHello:()=>{
              console.log(this.age)
          }
      }
      var age = 20
      Person.sayHello()	//20	没有上下文函数,this 指向 window
      
      
      var Person1 = {
          age: 18,
          sayHello: function(){
              console.log(this.age)
          }
      }
      var age = 20
      Person1.sayHello()		//18,函数的直接调用者为 Person1 ,所以 this 指向 Person1