Javascript Для обратного вызова цикла?

Попытка думать в Javascript, а не в jQuery, так что мне интересно, правильно ли я это делаю.

Я хочу иметь обратный вызов, когда мой цикл закончен. Правильно ли это?

for(var i = 0; i < divs.length; i++) {

  /* do some stuff */ 

  if ( i === (divs.length - 1)) {  /* call back */  }

}

Я должен добавить, что я не имею в виду что-то вроде обратного вызова запроса JSON, только когда цикл закончен.

Ответы

Ответ 1

Почему бы не сказать то, что вы действительно имеете в виду, и вызвать обратный вызов после цикла?

function thing_with_callback(divs, callback) {
    for(var i = 0; i < divs.length; i++) {
        /* do some stuff */ 
    }
    callback();
}

Ответ 2

Для ясности вы должны пойти с ответом @mu, но если вы действительно должны включить обратный вызов в конструкцию for, вы можете использовать оператор запятой *:

for(var i = 0;
    i < divs.length || function(){ /* call back */ }(), false;
    i++) {

/* do some stuff */ 

}

* Как объясняется в этой увлекательной статье.

Ответ 3

Просто, чтобы заставить codelahoma проще ответить, вы можете прямо вернуть false из своей функции обратного вызова. (чтобы избежать повторного выполнения кода цикла еще раз)

for(var i = 0;i < divs.length || function(){ /* callback */ return false;}();i++){
/* loop code */
}

Ответ 4

Мне кажется, речь идет о порядке выполнения javascript-кода. И ответы:

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