Как данные передаются анонимным функциям в JavaScript?

Когда я передаю «this» анонимной функции, например:

MyClass.prototype.trigger = function(){
    window.setTimeout(function(){this.onTimeout();},1000);
}

Я получаю ошибку «this.onTimeout не является функцией». Я предполагаю, что «this» больше не доступно во время выполнения анонимной функции? Итак, я делал это:

MyClass.prototype.trigger = function(){
    var me = this
    window.setTimeout(function(){me.onTimeout();},1000);
}

Это действительно, как вы должны делать вещи? Это вроде работает, но кажется странным.

Тогда у нас есть этот пример:

$(function(){
    function MyClass(){
        this.queue = new Array();
    }
    MyClass.prototype.gotAnswer = function(count){
        $('body').append("count:"+count+"<br/>");
    }
    MyClass.prototype.loadAll = function(){
        var count = 0;
        var item;
        while(item = this.queue.pop()){
            count++;
            var me = this;
            $.getJSON("answer.html",{},function(data){me.gotAnswer(count);});
        }
    }

    var o = new MyClass();
    o.queue.push(1);
    o.queue.push(2);
    o.loadAll();

});

Это выводит:

2
2

Не должно ли это вывести:

1
2

вместо? Затем я обнаружил, что помещение оператора $ .getJSON в другую функцию заставляет все это работать:

MyClass.prototype.loadAll = function(){
    var count = 0;
    var item;
    while(item = this.queue.pop()){
        count++;
        this.newRequest(count);
    }
}
MyClass.prototype.newRequest = function(count){
    var me = this;
    $.getJSON("answer.html",null,function(data){ me.gotAnswer(count); });
}

Это выводит:

1
2

(Или наоборот.) Что здесь происходит? Как правильно передать переменные в анонимную функцию?

Извините за запутанный и длинный пост.

Ответы на вопрос(3)

Ваш ответ на вопрос