(function (){
'use strict';
function Foo() {
this.foo = function() {
setTimeout(function(){ console.log(this); }, 0);
}
}
new Foo().foo();
}())
Если бы я не объявил строгий режим, то глобальный объект был бы напечатан на консоли (т.е. в окне).
НО, учитывая, что объявлен строгий режим, я ожидал, что undefined будет напечатано на консоли.
Ссылка:
«Это означает, среди прочего, что в браузерах больше нельзя ссылаться на объект окна через this внутри функции строгого режима».
Обновление: для достижения ожидаемого поведения вам необходимо создать новый контекст выполнения и ссылаться на него в этом контексте следующим образом:
(function (){
'use strict';
function Foo() {
this.foo = function() {
setTimeout(function(){ (function() { console.log(this); }()) }, 0);
}
}
new Foo().foo();
}())
this
при отсутствии контекста устанавливается на глобальный объект, который в браузерах равенwindow
- person Patrick Evans   schedule 13.08.2014