Это хак, чтобы заставить внутренние функции (функции, определенные внутри других функций) работать так, как они должны. В JavaScript, когда вы определяете одну функцию внутри другой, this
автоматически получает глобальную область видимости. Это может сбить с толку, потому что вы ожидаете, что this
будет иметь то же значение, что и во внешней функции.
var car = {};
car.starter = {};
car.start = function(){
var that = this;
// you can access car.starter inside this method with 'this'
this.starter.active = false;
var activateStarter = function(){
// 'this' now points to the global scope
// 'this.starter' is undefined, so we use 'that' instead.
that.starter.active = true;
// you could also use car.starter, but using 'that' gives
// us more consistency and flexibility
};
activateStarter();
};
Это определенно проблема, когда вы создаете функцию как метод объекта (как в примере car.start
), а затем создаете функцию внутри этого метода (например, activateStarter
). В методе верхнего уровня this
указывает на объект, который является методом (в данном случае car
), но во внутренней функции this
теперь указывает на глобальную область видимости. Это боль.
Создание переменной для использования по соглашению в обеих областях является решением этой очень общей проблемы с javascript (хотя это также полезно в функциях jquery). Вот почему используется очень общее звучащее имя that
. Это легко узнаваемое соглашение для преодоления недостатка в языке.
Как Эль Ронноко намекает на Дуглас Крокфорд считает, что это хорошая идея.