2.箭头函数

根据追源溯本原则

  • 箭头函数有什么优点?
  • 解决了什么问题?
  • 引入箭头函数有两个方面的作用:更简短的函数并且不绑定this。





  • 在ECMAScript 3/5中,通过将this值分配给封闭的变量,可以解决this问题。
  • 箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this
  • 由于 箭头函数没有自己的this指针,通过 call() 或 apply() 方法调用一个函数时,只能传递参数(不能绑定this),他们的第一个参数会被忽略, bind同样
  • 箭头函数不绑定Arguments 对象,在大多数情况下,使用剩余参数是相较使用arguments对象的更好选择
  • 箭头函数表达式对非方法函数是最合适的
  • 箭头函数不能用作构造器,和 new一起用会抛出错误
  • 箭头函数没有prototype属性。
  • yield 关键字通常不能在箭头函数中使用(除非是嵌套在允许使用的函数内)。因此,箭头函数不能用作生成器。




箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或 new.target。这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。

语法:

(参数1, 参数2, …, 参数N) => { 函数声明 }

//相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }
(参数1, 参数2, …, 参数N) => 表达式(单一)

// 当只有一个参数时,圆括号是可选的:
(单一参数) => {函数声明}
单一参数 => {函数声明}

// 没有参数的函数应该写成一对圆括号。
() => {函数声明}

//加括号的函数体返回对象字面表达式:
参数=> ({foo: bar})

//支持剩余参数和默认参数
(参数1, 参数2, ...rest) => {函数声明}
(参数1 = 默认值1,参数2, …, 参数N = 默认值N) => {函数声明}

//同样支持参数列表解构
let f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;
f();  // 6
  • 参考MDN

猜你喜欢

转载自www.cnblogs.com/yiquan/p/11622976.html