Why is this in an anonymous function undefined when using javascript in strict mode? I understand why this could make sense, but I couldn’t find any concrete answer.
Example:
(function () {
"use strict";
this.foo = "bar"; // *this* is undefined, why?
}());
Test in a fiddle: http://jsfiddle.net/Pyr5g/1/
Check out the logger (firebug).
It’s because, until ECMAscript 262 edition 5, there was a big confusion if people who where using the
constructor pattern, forgot to use thenewkeyword. If you forgot to usenewwhen calling a constructor function in ES3,thisreferenced the global object (windowin a browser) and you would clobber the global object with variables.That was terrible behavior and so people at ECMA decided, just to set
thistoundefined.Example:
The last line would throw an error in ES5 strict
(which is a much better behavior)