Oh, it will be. The context (global scope/window) is taken all the way to the last function… if the first function was called from window/global scope.

function a() { alert(window === this); b();  }
function b() { alert(window === this); }
a();

This will output true twice in a row: even inside b() this === window, even though b() was called from a(); It’s a chaining effect.

The alternative to this would be to instantiate b as a constructor. Just add to the above example following lines:

var c = new b();
c();

Now a call to c() returns false. (Even though it’s still calling b())

Think of c as b “version 2”. (its own instance.)

That’s because we instantiated it with new keyword.

When that happens a function owns its this context now. Even if it was called from window scope. So it’s not merely what context it was called from, but also how it was created.

Written by

Issues. Every webdev has them. Published author of CSS Visual Dictionary https://amzn.to/2JMWQP3 few others…

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store