关于javascript:this箭头函数

27次阅读

共计 1195 个字符,预计需要花费 3 分钟才能阅读完成。

一般函数

一般函数的 this,由动静作用域决定,指向它的间接调用者,没有间接调用者对立指向 window

1、状况一

function outFun() {console.log(this);
}
outFun(); // this 指向 window

// outFun() 没有间接调用者
// this 指向 window

2、状况二

var obj = {outFun: function() {console.log(this);
  }
};
obj.outFun(); // this 指向 obj

var og = obj.outFun;
og(); // this 指向 window

// obj.outFun() 的间接调用者是 obj,所以 this 指向 obj
// 把 obj.outFun 赋值给 og,og() 等同于间接执行 outFun,此时没有间接调用者 

3、状况三

var obj = {outFun: function () {function inFun () {console.log(this)
    };
    inFun ();}
};
obj.outFun(); // this 指向 window

// inFun 执行时没有间接调用者
// 当没有间接调用者的时候
// this 指向 window

箭头函数

箭头函数没有本人的 this,箭头函数里的 this 就是内部作用域里 this

1、状况一

var outFun = () => {console.log(this);
};
outFun(); // this 指向 window

// 箭头函数的内部作用域就是全局作用域
// 全局作用域里的 this 指向的就是 window(严格模式下,指向的是 undefined)

2、状况二

var obj = {outFun: () => {console.log(this);
  }
};
obj.outFun(); // this 指向 window
var og = obj.outFun;
og(); // this 指向 window

// 箭头函数是对象 obj 里的一个属性
// 其内部作用域也是全局作用域
// this 同样指向 window

3、状况三

var obj = {outFun: function () {var inFun = () => {console.log(this);
    };
    inFun();}
};
obj.outFun(); // this 指向的 obj
var og = obj.outFun;
og(); // this 指向 window

// 箭头函数 inFun 的内部作用域是 outFun
// 箭头函数里的 this 和内部作用域的 this 指向统一
// 然而 outFun 是个一般函数,一般函数的 this 指向的是其间接调用者
// 没有间接调用者时,指向 window

4、状况四

var obj = {
  inObj: {outFun: () => {console.log(this)
    }
  }
}

obj.inObj.outFun() // this 指向 window

// 箭头函数 outFun 是 obj.inObj 的一个属性
// 内部作用域是全局作用域
// 所以 this 指向 window

正文完
 0