Предполагается, что я правильно понял 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.