2011-03-18 145 views
1

這是什麼JavaScript代碼在這裏做什麼,特別是while循環:JavaScript while循環在這裏做什麼?

function setAjaxLinks(){ 
    var links = document.body.getElementsByTagName("a"); 
    var linkL = links.length; 

    while (linkL--) { 
     if (!links[linkL].href.match('#')) { 
      mj.pageLoad(links[linkL]); 
     } 
    } 
} 

我知道「MJ」並不真正意味着什麼,但究竟是一般的要點?

+0

這應該使用'for'而不是'while' – Shaz 2011-03-18 13:24:21

+2

@Shaz並不總是,看到我的答案 – 2011-03-18 13:25:50

回答

5

它從頁面上的所有鏈接(a-tags)循環遍歷從最後到第一個(遞減)。

如果它找到一個沒有#符號的鏈接,它會調用mj.pageLoad函數,並將相關鏈接作爲參數。

這裏的一個吹通過吹塑:

function setAjaxLinks(){ 
    //find all <a> tag elements on the page 
    var links = document.body.getElementsByTagName("a"); 
    //get the amount of <a> tags on the page 
    var linkL = links.length; 
    //loop over all <a> tags on the page from last to first 
    while (linkL--) { 
     //if the href attribute on the current <a> tag has a # sign in it 
     if (!links[linkL].href.match('#')) { 
      //then call this function (and from the name of the function convert it to an ajax call) 
      mj.pageLoad(links[linkL]); 
     } 
    } 
} 
0

它看起來像一個頁面預加載器。

while循環遞減linkL,直到它達到0並遍歷每個a標記。

1

這基本上是一個反向for循環。從「top」開始並倒計時直到達到0.在執行順序不相關的情況下,for循環的效率更高。

1

基本上它遍歷集合links,並檢查它們是否包含#

linkL存儲集合的長度。 while檢查此變量的布爾值,然後將其減1。所以當linkL達到零時,它仍然會運行,並且在下一個回合中零將評估爲false,所以它停止。

如果您在while之後檢查linkL,它將爲-1。

4

表達:

linkL-- 

減一linkL並返回linkL以前的值。

表達:

while (someIntValue) { ... } 

運行循環體而someIntValue0。它等效於:

while (someIntValue != 0) { ... } 

所以:

while (linkL--) { ... } 

將運行與linkL環(環內)從其初始值減去一個變化,零,包容性。