关于this其实没有一个统一的解释,它算是JavaScript中最让人困惑的一个概念了。一种通俗的解释就是,this的取值依赖于函数被谁调用。
1.如果是使用new关键字来调用函数,那么函数内部的this就是一个全新的对象。
2.如果使用apply、call或者bind来调用一个函数,函数内部的this就将指向传入的第一个参数。(注:使用这几个方法可以改变this的指向)
3.如果函数被作为一个方法进行调用,比如:obj.method() --- 那么this就该函数的调用者。(注:样例中的obj)
4.如果函数被独立调用,也就是没有被上述的几种情况调用。(比如:method())这种情况,this将指向于一个全局对象,在浏览器中是window对象。(nodejs环境中是global)如果是使用严格模式的话,那么全部对象将会是undefined。
5.如果使用了上述多条规则的话,那么排序靠前的将优先控制this的指向。
6.在ES2015中的箭头函数,将会忽略上述的所有规则,而将取决与函数创建时的作用域。(箭头函数的作用域在创建时就已经确定,不能更改。想想真是问题终结者...)