Уточнение по закрытиям в Javascript с AJAX

Предполагается, что я правильно понял Cloures в Javascript, но я, очевидно, не понял...

На данный момент в тексте, который я читаю, есть эта функция для абстрагирования AJAX вызова:

function request(url, callback){
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = (function(myxhr){
    return function(){
      callback(myxhr);
    }
  })(xhr);
  xhr.open('GET', url, true);
  xhr.send('');
}

Вот моя реальная проблема: мой мозг отказывается понимать, почему эта функция не работает:

function request(url, callback){
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = callback(xhr);
  xhr.open('GET', url, true);
  xhr.send('');
}

То есть, в "моем" варианте, то, что я представляю, должно произойти: я вызываю say request('http://...', a_callback). Внутри request() создается новый объект xhr, и он назначается на обратный вызов... разве это не сработает? Каковы будут (неприятные) побочные эффекты? Из моего (ограниченного) понимания, закрытия нужны, когда, например, в цикле вы можете обратиться к последнему значению переменной функции. Но здесь... разве это "var xhr=..." не означает, что каждый раз создается новый объект?

Пожалуйста, объясните, как будто у меня IQ 30 (что, вероятно, правда :D )

Merc.

8
задан Merc 30 October 2011 в 15:23
поделиться