If you must nest functions in a way that requires access to multiple this', alias outer this to something meaningful - describe the value it's holding. Treat this as the invisible first argument.
In general though, avoiding the situation (nested functions and frivolous use of this
) will frequently produce clearer results.
I was accidentally included in a discussion on how to best name this
in nested functions in JavaScript. +1's were given to this suggestion of using _this
.
Giving style advice on naming nested this
without a meaningful context isn't too helpful in my opinion. Examples below have been altered to have at least some context, although a completely contrived and stupid one.
Assume this setup:
var morgan = new Person("Morgan");
morgan.logger = function() {
var self = this;
return function() {
console.log(self);
};
};
morgan.logger = function() {
var that = this;
return function() {
console.log(that);
};
};
morgan.logger = function() {
var _this = this;
return function() {
console.log(_this);
};
};
morgan.logger = function() {
var person = this;
return function() {
console.log(person);
};
};
Function.prototype.throttle = function (ms) {
var fn = this;
var timer;
return function () {
clearTimeout(timer);
var args = [].slice.call(arguments);
timer = setTimeout(function () {
fn.apply(this, args);
}, ms || 100);
};
};
var throttled = myFunc.throttle(50);
throttled("Hey there!");
In the above example, "fn" is way superior to "_this". Still, the following example would be even better:
function throttle(fn, ms) {
var timer;
return function () {
clearTimeout(timer);
var args = [].slice.call(arguments);
timer = setTimeout(function () {
fn.apply(this, args);
}, ms || 100);
};
};
var throttled = throttle(myFunc, 50);
throttled("Hey");
throttled("Hey there!");
See tl;dr ;)