I like in JavaScript the possibility to change the function execution context, also known as this.
For example, you can use array methods on array-like objects:

const reduce = Array.prototype.reduce;

function sumArgs() {
  return reduce.call(arguments, (sum, value) => {
    return sum += value;
  });
}

sumArgs(1, 2, 3); // => 6

The other side of the coin is that this keyword is difficult to grasp.

Often you might find yourself searching why this has an incorrect value. The following sections will teach you easy ways how to bind this to the desired value.

#javascript #this

How to Handle Easily 'this' in JavaScript
1.10 GEEK