关于javascript:箭头函数理解

参见 https://www.jianshu.com/p/051…
https://segmentfault.com/a/11…

接下来仨
https://segmentfault.com/a/11…
箭头函数
https://es6.ruanyifeng.com/#d…
https://segmentfault.com/a/11…

以下次要记录本人不太懂的中央,详解见上述链接

留神点

箭头函数有几个应用留神点。

(1)函数体内的this对象,就是定义时所在的对象,而不是应用时所在的对象。
(2)不能够当作构造函数,也就是说,不能够应用new命令,否则会抛出一个谬误。
(3)不能够应用arguments对象,该对象在函数体内不存在。如果要用,能够用 rest 参数代替。
(4)不能够应用yield命令,因而箭头函数不能用作 Generator 函数。

箭头函数基本没有本人的this,导致外部的this指向了外层代码的this这个指向在定义时就曾经确定而不会在调用时指向其执行环境的(变量)对象。除了this,以下三个变量在箭头函数之中也是不存在的,指向外层函数的对应变量:argumentssupernew.target

因为箭头函数没有本人的this,所以当然也就不能用call()apply()bind()这些办法去扭转this的指向。

根底
  1. 因为大括号被解释为代码块,所以如果箭头函数间接返回一个对象,必须在对象里面加上括号,否则会报错。
let getTempItem = id => ({ id: id, name: "Temp" });
  1. 箭头函数能够与变量解构联合应用。
const full = ({ first, last }) => first + ' ' + last;

// 等同于
function full(person) {
  return person.first + ' ' + person.last;
}
用处
  1. 简化回调函数
  2. 解构为数组
const numbers = (...nums) => nums;

numbers(1, 2, 3, 4, 5)
// [1,2,3,4,5]

const headAndTail = (head, ...tail) => [head, tail];

headAndTail(1, 2, 3, 4, 5)
// [1,[2,3,4,5]]
实战

超时调用(setTimeout回调)的代码都是在全局作用域环境中执行的,因而(setTimeout回调)函数中this的值在非严格模式下指向window对象,在严格模式下是undefined

不实用场合
第一个场合是定义对象的办法,且该办法外部包含this。会指向全局变量,因为对象不形成独自的作用域,导致箭头函数定义时的作用域就是全局作用域。

const cat = {
  lives: 9,
  jumps: () => {
    this.lives--;
  }
}

第二个场合是须要动静this的时候,也不应应用箭头函数。

var button = document.getElementById('press');
button.addEventListener('click', () => {
  this.classList.toggle('on');
});

下面代码运行时,点击按钮会报错,因为button的监听函数是一个箭头函数,导致外面的this就是全局对象。如果改成一般函数,this就会动静指向被点击的按钮对象。

嵌套的箭头函数(没看)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理