function f() {
'use strict';
alert(this);
}
f(); // выводится undefined
setTimeout(f, 0); // выводится [object Window]
Т. е. при вызове функции через setTimeout игнорируется 'use strict'. Почему?
Ответ
данное поведение документировано
Проблема с "this"
Когда вы передаете метод в setTimeout() (или любую другую функцию), то он будет выполнен со значением this, которое может отличаться от того, которое вы ожидаете. Более подробно эта проблема объясняется в руководстве.
Объяснение
Код, исполняемый в setTimeout(), имеет другой контекст выполнения, нежели функция, вызвавшая setTimeout. Для установки значения this вызываемой функции применяются обычные правила, и если вы не установили значение this при вызове или, используя bind, то значением по умолчанию в non-strict режиме будет объект global (или window), а в strict-режиме значение undefined. Оно не будет таким же как значение this функции, вызвавшей setTimeout
Замечание: Значение this по умолчанию в callback-методе, вызванном в setTimeout, все равно будет иметь значение window, а не undefined, даже при использовании strict mode
Комментариев нет:
Отправить комментарий