关于This,和JS的闭包这些,应该都是老生常谈了,本不应该说,因为一直在用TS&ES6+,对es5多了些淡忘,在小程序开发时,一度忘了this在哪

简介请戳深入理解JavaScript原型和闭包 -- This用法

this 指向的固定化,并不是因为箭头函数内部有绑定 this 的机制,实际原因是箭头函数根本没有自己的 this,导致内部的 this 就是外层代码块的 this。正是因为它没有 this,所以也就不能用作构造函数。

所以,箭头函数转成 ES5 的代码如下。

// ES6
function foo() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
}
// ES5
function foo() {
var _this = this;

setTimeout(function () {
console.log('id:', _this.id);
}, 100);
}

上面代码中,转换后的 ES5 版本清楚地说明了,箭头函数里面根本没有自己的 this,而是引用外层的 this。

可以再次翻阅阮一峰老师的资料 ECMAScript 6 入门 - 箭头函数