Не думаю, что я бы это сделал, но он полностью совместим с браузерами , если this
ссылается на глобальный объект (window
).Будет ли это зависеть от того, как была вызвана рассматриваемая функция (в глобальном масштабе this
действительно ссылается на глобальный объект), и от того, находится ли рассматриваемый код в «строгом режиме» или нет.(В строгом режиме , this
не не ссылаются на глобальный объект. Престижность и восхищение Esailija за указание на это. )
В нестрогом коде:
Так в глобальной области видимости:
console.log(this === window); // true if not in strict mode
И аналогично, если у вас есть функция, которую вы вызываете напрямую:
function foo() {
console.log(this === window);
}
foo(); // Logs "true"
Но , в JavaScript this
полностью определяется тем, как вызывается функция.Таким образом, мы могли бы вызвать foo
, установив this
в другое значение:
var obj = {};
foo.call(obj); // Now it logs "false", `this` === `obj` during the call
Аналогично:
var obj = {};
obj.f = foo;
obj.f(); // Also logs "false", `this` === `obj` during the call
Итак, в заключение, в глобальной области (не в вызове какой-либо функции),да, this
надежно указывает на глобальный объект, и если вы контролируете, как вызывается функция, и вызываете ее, не устанавливая this
для чего-либо еще (через call
или apply
, или используя его изсвойство объекта a'la obj.f
выше), то, опять же, оно будет надежно ссылаться на глобальный объект.Это охватывается разделами 10.4.1 (Ввод глобального кода) и 10.4.3 (Ввод кода функции) спецификации.Я верю, что так было с самого начала;безусловно, в течение последних 15 лет, поэтому вы вряд ли найдете несоответствующую среду.
Дополнительные материалы: