美文网首页
ES6学习——箭头函数

ES6学习——箭头函数

作者: 椰果粒 | 来源:发表于2019-03-12 21:06 被阅读0次

箭头函数作为函数扩展的一部分,单独拿出来写一篇文章

ES6中的箭头函数,相对于普通函数来说更加简洁,且对this的指向问题进行了改进

箭头函数使用时的注意点:

    1. 函数体内的 this对象是定义时所在的对象,而不是使用时所在的对象。this对象的指向本身是可变的,但是它在箭头函数中是固定的
    1. 箭头函数不可以当做构造函数,不可以使用new命令,否则会抛出错误
  • 3、不可以使用arguments对象,arguments对象在函数体内不存在。可以用rest参数来代替
  • 4、不可以使用yield命令,因此箭头函数不能用作generator函数

JS中函数的写法

下面两者等价

var f = v => v;  // 箭头函数
等价:
var g = function(v){  // 普通函数
  return v;
}

注意:普通函数有函数声明和函数表达式两种定义方式
箭头函数只能是表达式的形式
箭头函数是匿名的
如果没有{},不用写return,会自己帮你加上
{}与return是同时存在的

如果箭头函数不需要参数或者需要多个参数,就用()代表参数部分

var f = () => v;
等价于:
var f = function(){
  return v;
}

如果返回多个语句,就用{}来将其括起来,并用return返回

var sum = (num1,num2) => {return num1+num2} 
console.log(sum(1,2));  // 3

这里的{}被解析为代码块,所以如果箭头函数返回一个对象,必须在返回的对象外加一层()

var getTemp = id => ({id : id, name : 'temp'}); // 这是返回一个对象({})

箭头函数和变量解构结合使用

const full = ({first, last}) => first + last

箭头函数与rest参数结合

const numbers = (...nums) => nums;
console.log(numbers(1,2,3,4,5));    // [1, 2, 3, 4, 5]

关于箭头函数this指向问题
示例一:

// 普通函数
function foo1(){
  setTimeout(function(){
    console.log("id:"+this.id)
  },100)
}
var id = 10;
foo1.call({id:20})
// 打印:id是10,因为执行时this指向了全局

// 箭头函数
function foo2(){
  setTimeout(()=>{
    console.log("id:"+this.id)
  })
}
foo2.call({id:30})
// 打印:id是30,因为箭头函数的this在定义的时候就确定了

示例二:

class Animal{
  constructor(){
    this.type = 'animal'
  }
  say(val){
    setTimeout(function(){
      console.log(this);  // 这里的this指向了window
      console.log(this.type + " say " + val)
    },1000)
  }
  drink(val){
    setTimeout(()=>{
      console.log(this)
      console.log(this.type + " drink " + val)
    },2000)
  }
}
var animal = new Animal()
animal.say("hello")
// 普通函数中
// window
// undefined say hello

animal.drink("water")
// 箭头函数中
// Animal({})
// animal drink water

普通函数中,this为什么指向window:因为在JS高程中写 `超时调用的代码都在全局中执行;因此this在非严格模式下指向了window,在严格模式下指向了undefined

箭头函数中,为什么指向Animal构造函数:this指向定义时的对象

相关文章

  • ES6箭头函数简介

    @(JS技巧)[ES6|箭头函数] ES6箭头函数(Arrow Functions) ES6可以使用“箭头”(=>...

  • es6全家桶(二)—— 箭头函数

    es6全家桶(二)—— rest参数、箭头函数 箭头函数 ES6 允许使用“箭头”(=>)定义函数。 var f ...

  • es6、js、css、jquery、vue以及程序设计 知识点总

    es6 列举常用的es6特性。 箭头函数this的指向。 eg:箭头函数的特性 箭头函数内部没有construc...

  • ES6新特性5:函数的扩展之箭头函数

    箭头函数在ES6中最常用的特性,学习好至关重要,特别在Vue项目和React项目。 箭头函数:ES6中使用(=>)...

  • 箭头函数

    ES6允许使用“箭头”(==>)定义函数。 箭头函数 等同于

  • 学习 ES 6 箭头函数

    箭头函数的用法 ES6 允许使用“箭头”(=>)定义函数。 箭头函数的一个用处是简化回调函数。 箭头函数 this...

  • JavaScript箭头函数

    ES6新语法箭头函数 箭头函数是ES6新语法,因为语法简单、可读性好,所以使用的也很多。箭头函数也是匿名函数,区别...

  • 关于ES6箭头this的指向问题

    ES6 允许使用 “ 箭头 ” (=>)定义函数。 箭头函数 填 坑。 this的指向是 向上查找 非箭头函数的...

  • ES6箭头函数(Arrow Functions)

    箭头函数是什么?(What) 箭头函数 (Arrow Functions)也称“胖箭头函数”,是ES6全新的特性。...

  • 2019-01-11

    ES6 箭头函数 箭头函数表示法:()=>console.log('Hello') 箭头函数和普通函数的区别 和普...

网友评论

      本文标题:ES6学习——箭头函数

      本文链接:https://www.haomeiwen.com/subject/qutnpqtx.html