В приведенном ниже фрагменте кода, почему window.foo существует, но this.bar не определен?Контекст и функции объекта JavaScript
function foo() {
function bar() { };
console.log(this.bar);
}
console.log(window.foo);
foo.call({});
В приведенном ниже фрагменте кода, почему window.foo существует, но this.bar не определен?Контекст и функции объекта JavaScript
function foo() {
function bar() { };
console.log(this.bar);
}
console.log(window.foo);
foo.call({});
В браузере окно является глобальным объектом, поэтому оно доступно везде, если оно не затенено. this
указывает только на то, что полезно в теле функции, называемой методом; в foo.bar() - где в bar
, this
- foo
, или когда bar.call (...) или bar.apply (...) вызывается с аргументом для this
или когда вы находитесь вне функции вообще говоря, где он указывает на глобальный объект (окно).
Вы явно выполняете foo.call ({}), который устанавливает это в пустой объект. Таким образом, this.bar не существует во время этого вызова.
Потому что 'this' в JavaScript' не имеет ничего общего с областью переменных. Это динамическое значение, которое устанавливается на основе того, как вызывается функция. Исключением является глобальная среда, в которой 'this' ссылается на глобальный объект' window', который также содержит глобальные переменные. – 2013-05-07 18:12:22
'this' ищет метод' bar' или объект объекта 'global', который будет' window'. 'bar' не определен в объекте' global'. – Sethen
Что меня больше всего смущает, так это то, что window.foo существует. Почему это происходит в глобальном масштабе, но не в каждом охвате ребенка? –