一、前言
this指向,apply,call,bind的区别是一个经典的面试问题,同时在项目中会经常使用到的原生的js方法。同时也是ES5中的众多坑的一个。ES6中可能会极大的避免了this产生的错误,有时候需要维护老的项目还是有必要了解一下this的指向和apply,call,bind三者的区别。
二、this的指向
在ES5中,其实this的指向,始终坚持一个原理:this永远指向最后一个调用它的那个对象。
首先我们看一个栗子1:
var name = "windowsName";function a() { var name = "Cherry"; console.log(this.name); // windowsName console.log("inner:" + this); // inner: Window}a();console.log("outer:" + this) // outer: Window
输出windowsName,是因为“this永远指向最后调用它的那个对象”,我们看到调用a的地方a(),前面没有调用的对象那么就是全局对象window,就是全局对象调用a(),相当于window.a()。
如果使用严格模式,全局对象就是undefined,会报错name of undefined
栗子2:
var name = "windowsName";var a = { name: "Cherry