首先,this
对象是在运行时基于函数的执行环境绑定的,是发生在调用的时候。这个“超级”延迟绑定(very late binding)使得函数可以对this高度复用。
在全局函数中,this
等于window
;当函数被作为某个对象的方法调用时,this
等于那个对象。匿名函数的执行环境具有全局性,因此其this
通常指向window
(当然,在通过调用call()
或apply()
方法改变函数执行环境的情况下,this
就会指向其他对象)。对于闭包,在某些情况下,这点可能不太明显。
每个函数在被调用时,会自动取得两个特殊变量——this
和arguments
。
内部函数在搜索这两个变量的时候,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变量。
幸运的是,有一个很简单的解决方法:
如果该方法定义一个变量并为其赋值为
this
,那么内部函数就可以通过这个新的变量来访问到this
。按照约定,这个变量命名为that。
网友评论