Почему при запуске в окне консоли Chrome это не регистрируется в консоли?

(function (){
  'use strict';
  function Foo() { 
    this.foo = function() { 
      setTimeout(function(){ console.log(this); }, 0);
    } 
  }
  new Foo().foo();
}())

Если бы я не объявил строгий режим, тогда глобальный объект был бы выведен на консоль (т.е. окно).

НО, учитывая, что объявлен строгий режим, я ожидал, что undefined будет напечатано на консоли.

Ссылка:

"Это означает, среди прочего, что в браузерах больше нельзя ссылаться на объект окна через эту функцию в строгом режиме".

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode

Обновление: чтобы достичь ожидаемого поведения, вам нужно создать новый контекст выполнения и сослаться на это в этом контексте следующим образом:

(function (){
  'use strict';
  function Foo() { 
    this.foo = function() { 
      setTimeout(function(){ (function() { console.log(this); }()) }, 0);
    } 
  }
  new Foo().foo();
}())

0 ответов

Другие вопросы по тегам