Что делает цикл JavaScript while? - PullRequest
1 голос
/ 18 марта 2011

Что этот код 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" на самом деле ничего не значит, но каков общий смысл?

Ответы [ 6 ]

5 голосов
/ 18 марта 2011

Он перебирает все ссылки (a-теги) на странице от последней к первой (с уменьшением).

Если он находит ссылку, в которой нет символа #,он вызывает функцию 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]);
        }
    }
}
4 голосов
/ 18 марта 2011

Выражение:

linkL--

уменьшается на linkL на единицу и возвращает предыдущее значение linkL.

Выражение:

while (someIntValue) { ... }

выполняетсятело цикла, в то время как someIntValue не является 0.Это эквивалентно:

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

Итак:

while (linkL--) { ... }

запустит цикл с linkL (внутри цикла), варьирующимся от его начального значения минус один, до нуля включительно.

2 голосов
/ 18 марта 2011

Это обратное время, которое во многих / большинстве случаев быстрее, чем «для»: цитата здесь: http://blogs.oracle.com/greimer/entry/best_way_to_code_a

1 голос
/ 18 марта 2011

По сути, он перебирает коллекцию links и проверяет, содержат ли они #.

linkL, хранит длину коллекции.while проверяет логическое значение этой переменной, а затем уменьшает его на единицу.Поэтому, когда linkL достигает нуля, он все равно будет работать, а в следующем повороте ноль будет оцениваться как false, поэтому он останавливается.

Если вы проверите linkL после while, он будетбыть -1.

1 голос
/ 18 марта 2011

Это в основном обратный цикл for. Начиная с «вершины» и заканчивая обратным отсчетом до достижения 0. В ситуациях, когда порядок выполнения не имеет значения, более эффективен цикл for.

0 голосов
/ 18 марта 2011

Похоже на предзагрузчик страниц.

Цикл while уменьшает linkL до тех пор, пока не достигнет 0, и не будет проходить итерацию по каждому тегу a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...