Я начинаю закрывать (и Javscript вообще), и я не могу найти удовлетворительное объяснение того, что происходит в этом коде:
function myObject(){
this.myHello = "hello";
this.myMethod = do_stuff;
}
function do_stuff(){
var myThis = this;
$.get('http://example.com', function(){
alert(this.myHello);
alert(myThis.myHello);
});
}
var obj = new myObject;
obj.myMethod();
Он будет предупреждать "undefined", а затем "привет". Очевидно, это не должно быть специфичным для jQuery, но это простейшая форма моего исходного кода, который я мог бы придумать. Закрытие в do_stuff()
имеет доступ к переменным в этой области видимости, но, видимо, это правило не относится к ключевому слову this
.
Вопросы:
Что происходит с this
, когда закрытие выходит за пределы области do_stuff()
(в данном случае $.get()
)? Имеет ли myThis
копию this
или ссылку на нее? Как правило, не рекомендуется использовать this
в закрытии?
Любой ответ очень ценится.