Почему this всё время указывает на глобалный объект?
Вот код:
function d(){var z=1; function f(){var z=4; alert(this.z);};f();return f;} var x; var z=2; x=d(); x(); почему он два раза подряд выводит 2? Хотя должен бы сначала 1, а потом 2.... |
так как у Вас здесь объектов нет то this указывает на window
если написать так function d(){this.z=1;this.f= function (){var z=4; alert(this.z);};this.f();return this.f;} var x; var z=2; x= new d(); x(); то вернет 1 и 2 |
Цитата:
|
Цитата:
http://javascript.ru/Function/call Таким образом, при выполнении функции всегда соблюдается условие typeof this == 'object' |
Так ведь функция определённая внутри другой функции, считается её локальной переменной, а следовательно свойством объекта активации? Выходит, что объект активации не принимается в расчёт?
|
Если функция вызывается обычным способом, не как метод, то this получает значение глобального объекта (или undefined в строгом режиме).
То, что вы называете объектом активации функции, в спецификации называется лексическим окружением. Оно является типом спецификации в отличии от языковых типов. Лексические окружения не являются объектами в понимании Джавакрипта и не могут могут возвращаться выражениями. Функция f() действительно вызывается в контексте функции d(), но передаваемый аргумент this определяется по другим правилам, одно из которых я написал выше. |
Цитата:
|
|
Часовой пояс GMT +3, время: 07:34. |