this关键字在JavaScript中是一个动态变化的值,让初学者或者基础知识不扎实的人对它的理解不够,导致阅读别人代码或者自己写的时候出错,让我们开始学习它吧。
全局对象
在全局范围内(不在任何方法内),这就指全局对象,这时this等同于window。
1 | /* this 等于 window */ |
方法内部
在一个方法内部,this的值取决于这个函数是怎么被调用的。
demo1 – 普通调用
1 | function f1() { |
没在严格模式下,this默认是一个全局对象。
1 | ; |
在严格模式下,this等于给它设置的值,因为没有设置,所以就是undefined了。
demo2 – 对象方法调用
1 | var obj = { |
而当函数被作为某个对象的方法调用时,this等于那个对象。不过匿名函数的执行环境具有全局性,因此其 this 对象通常指向 window(通过 call()或apply()改变函数执行环境的情况下,this 就会指向其他对象)。
1 | var age = 90; |
每个函数在调用时,都会去获取2个值:arguments和this。匿名函数在获取这2个值时,只会搜索自己执行环境中的,永远不会直接访问外部函数或执行环境中的这2个变量。而this指向的是自己的调用者,匿名函数的调用者=window,所以this指向window。
1 | var age = 90; |
要想让getAge方法获取自己对象中的age属性,需要在调用闭包前给this赋值。