2014-07-02 52 views
0

我可以想到使用XMLHttpRequest的兩個簡單方案。 第一個是:AJAX - 正確使用異步XMLHttpRequest

var xxx = new XMLHttpRequest(); 
xxx.onreadystatechange = function() { 
    if (xxx.readyState === 4) { 
    if (xxx.status === 200) ... 
    else ... 
    } 
}; 

function getData() { 
    xxx.open('get', 'zzz.php'); 
    xxx.send(null); 
} 

而第二個是:

function getData() { 
    var xxx = new XMLHttpRequest(); 
    xxx.onreadystatechange = function() { 
    if (xxx.readyState === 4) { 
     if (xxx.status === 200) ... 
     else ... 
    } 
    }; 
    xxx.open('get', 'zzz.php'); 
    xxx.send(null); 
} 

雖然第一種方案更有意義,我 (在XXX對象保持活着的getData函數完成,即使), 這是整個顯示的第二個例子。它是如何工作的? 不應該從getData函數立即返回時將xxx對象殺死?

+1

垃圾收集不是即時的,並且您仍在引用功能 – user1094553

+0

內的XMLHttpRequest對象。如果您連續調用它兩次,第一個函數將不起作用。 – Bergi

回答

0
  • 它的大部分將已經被破壞的時間,但在功能上 getDate您創建獲取一個 利特爾位以後叫anoter匿名函數。
  • 當該功能被創建時,它'繼承'功能範圍getData 功能。
  • 所以,當執行getDate時,唯一引用 xxx對象的就是那個匿名函數。
  • 如果你真的想要更多,谷歌'JavaScript關閉'。這應該給你更深入的見解。