箭头函数this的指向是函数定义时所在作用域的上下文对象,而对象是不能构成单独作用域的。箭头函数的this为所在的作用域指向的对象
第一种情况:下面的代码中,箭头函数所在作用域其实是全局的js环境,js中的作用域只有全局作用域与函数作用域,没有块作用域的说法
var name = 'window';
var A = {
name: 'A',
sayHello: () => {
console.log(this.name)
}
}
A.sayHello(); // window
第二种情况:: 箭头函数所在的作用域是函数作用域
var name = 'window';
var A = {
name: 'A',
sayHello: function(){
return () => {
console.log(this.name)
}
}
}
A.sayHello()(); // A
第三种情况::
var name = 'window';
var A = {
name: 'A',
sayHello: function(){
return () => {
console.log(this.name)
}
}
}
const b = A.sayHello;
b()(); // window 因为此时 相当于window.sayhello()(),sayhello内部的this对象指向window
第四种情况::
var name = 'window';
var A = {
name: 'A',
sayHello: function(){
return () => {
console.log(this.name)
}
}
}
const b = A.sayHello();
b(); // A 箭头函数this对象的指向在定义时就确定了,运行时不会改变this的值,此时sayhello内部的this对象指向A对象。
函数独立调用(不论这个函数在哪调用),this 默认指向到 window;
在非严格模式中,当this指向undefined时,它会被自动指向全局对象
默认情况下,自执行函数的 this 指向 window
function foo() {
console.log(this.a)
}
function active(fn) { fn = obj.getA
fn(); // 真实调用者,为独立调用
}
var a = 20;
var obj = {
a: 10,
getA: foo
}
active(obj.getA); // 20