Accessing this in a forEach loop results in undefined

In strict mode if you call a function not through a property reference and without specifying what this should be, it’s undefined.

forEach (spec | MDN) allows you to say what this should be, it’s the (optional) second argument you pass it:

aGlobalVar.thing.prototype.amethod = function() {
  data.forEach(function(d) {
    console.log(d);
    console.log(this.value);
  }, this);
  // ^^^^
}

Alternately, arrow functions were added to JavaScript in 2015. Since arrows close over this, we could use one for this:

aGlobalVar.thing.prototype.amethod = function() {
  data.forEach(d => {
    console.log(d);
    console.log(this.value);
  });
}

Leave a Comment