this从哪来?
this是一个关键字,它不允许更改或者赋值,任何函数只要作为方法调用时实际上都会传入一个隐式的实参–这个实参是一个对象,方法调用的母体就是这个对象(this);
普通函数里面的this
1.当函数作为一个方法调用时: 调用的母体就是该对象;
2.当作普通函数调用时:调用的母体是window;
3.闭包里面的this:
var obj = function(){
var one = 1;
return function read(){
console.log(one)
}
}
obj()()
//这一步等价于
var step1 = obj();
var step2 = step1(); //window调用
箭头函数里面的this
es6转化为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);
}
因此箭头函数的this始终指向绑定它的对象,而不是调用它的对象