this
не является частью области закрытия, его можно рассматривать как дополнительный параметр для функции, связанной с сайтом вызова. Если метод не вызывается как метод, то глобальный объект передается как this
. В браузере глобальный объект идентичен window
. Например, рассмотрим следующую функцию,
function someFunction() {
}
и следующий объект,
var obj = { someFunction: someFunction };
Если вы вызываете функцию, используя синтаксис метода, такой как,
obj.someFunciton();
, тогда this
связан с obj
.
Если вы вызываете someFunction () напрямую, например,
someFunction();
затем this
привязывается к глобальному объекту, то есть window
.
Наиболее распространенным обходным решением является включение этого в замыкание, например,
displayMe : function() {
// the 'this' pointer is referring to the std_obj
if (this.activeEffect=="fade") { }
var that = this;
var doSomeEffects = function() {
// the 'this' pointer is referring to global
// that, however, refers to the outscope this
if (that.activeEffect=="fade") { }
}
doSomeEffects();
}