要了解的最重要的一点是,函数对象 没有固定的this
值 -
this更改的值取决于函数的调用方式。我们说
_用一个特定的
this值调用_一个函数-该
this值是在调用时间而不是定义时间确定的。
- 如果该函数被称为“原始”函数(例如,do
someFunc()
),this
则将是全局对象(window
在浏览器中)(或者undefined
该函数在严格模式下运行)。 - 如果将其作为对象上的方法
this
调用,则将成为调用对象。 - 如果你调用一个函数
call
或apply
,this
被指定为第一个参数call
或apply
。 - 如果将其称为事件侦听器(如此处所示),
this
它将是作为事件目标的元素。 - 如果使用调用它作为构造函数
new
,this
则将是一个新创建的对象,其原型设置为prototype
构造函数的属性。 - 如果函数是
bind
操作的结果,则该函数将始终永远this
设置为产生该函数的bind
调用的第一个参数。(这是唯一的例外的“函数不具有固定的this
”规则-产生由功能bind
实际上 做 有一个不可变this
)。
使用
var that = this;是一种
this在函数 定义时 (而不是函数 执行时
,
this可以是什么,取决于函数调用方式)存储值的方法。此处的解决方案是将的外部值存储在新定义的函数的范围内的
this变量(传统上称为
that或
self)中,因为新定义的函数可以访问在其外部范围内定义的变量。


![用“ var that = this”了解Javascript范围[重复] 用“ var that = this”了解Javascript范围[重复]](http://www.mshxw.com/aiimages/31/400590.png)
