箭头函数中的 this
理解下箭头函数中 this 的本质, 看如下代码:
() => console.log(this)
经过 babel 转化后的 ES5 代码如下
var self = this
(function () {
console.log(self)
})
结论: 箭头函数中 this 的值等同于箭头函数当前所处作用域下的 this。
箭头函数的一些不易理解场景
有如下 html 代码,
<body>
<input />
</body>
加上如下 JavaScript 脚本测试 this 指向:
var inputTest = document.getElementsByTagName('input')
inputTest[0].addEventListener('click', function() {
console.log(this) // 指向 input
})
inputTest[0].addEventListener('click', () => {
console.log(this) // window
})
上述这段是为 dom 节点绑定事件的常见写法, 但是 this 指向就很奇怪了, ES5 中指向了 input;
, ES6 中却指向了 window。至于原因, 其实是回调函数引起的坑(得看浏览器触发事件时的代码)。再加上箭头函数的特殊性所以产生以上迷惑的代码片段。
箭头函数小 tip
当箭头函数返回的结果是对象时, 注意下写法的细节:
const result1 = () => ({ a: 1 })
const result2 = () => { return { a: 1 } }