- 普通函数:
this指向函数调用时的对象;
function foo() {
return function() {
return function() {
return function(){
console.log('id:', this.id);
};
};
};
}
var id=1;
var f = foo.call({id: 1});
var t1 = f.call({id: 2})()(); // id: 1
var t2 = f().call({id: 3})(); // id: 1
var t3 = f()().call({id: 4}); // id: 4
- 箭头函数:
箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。
由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。
正是因为它没有this,所以也就不能用作构造函数。
function foo() {
return () => {
return () => {
return () => {
console.log('id:', this.id);
};
};
};
}
var f = foo.call({id: 1});
var t1 = f.call({id: 2})()(); // id: 1
var t2 = f().call({id: 3})(); // id: 1
var t3 = f()().call({id: 4}); // id: 1
上述代码只有一个this,就是foo的this