Я столкнулся с случаем, когда это было полезно совсем недавно, поэтому я решил опубликовать его.
Предположим, вы хотите проверить несколько условий в одном if, и если какое-либо из условий выполняется, вы хотите сгенерировать сообщение об ошибке. Если вы хотите включить в свое сообщение об ошибке, какое конкретное условие вызвало ошибку, вы можете сделать следующее:
std::string e;
if( myMap[e = "ab"].isNotValid() ||
myMap[e = "cd"].isNotValid() ||
myMap[e = "ef"].isNotValid() )
{
// here, e has the key for which the validation failed
}
Так что, если второе условие является тем, которое оценивается как true, e будет равно " CD". Это связано с поведением короткого замыкания в ||
, которое предписано стандартом (если не перегружено). См. этот ответ для более подробной информации о коротком замыкании.
Этот код решает проблему и экономит время загрузки, которое я искал.
После прочтения этого сообщения о том, как большинство современных библиотек js реализуют тесты для dom загруженное событие. Я потратил некоторое время на обфусцированный код и смог определить, что addthis использует комбинацию упомянутого метода doscroll, таймеров и события DOMContentLoaded для различных браузеров. Поскольку только те браузеры, которые зависят от события DOMContentloaded, в любом случае будут нуждаться в следующем коде:
if( document.createEvent ) {
var evt = document.createEvent("MutationEvents");
evt.initMutationEvent("DOMContentLoaded", true, true, document, "", "", "", 0);
document.dispatchEvent(evt);
}
, а остальное зависит от таймеров, проверяющих наличие определенных свойств, мне нужно было приспособить только этот один случай, чтобы иметь возможность лениво загружать это внешнее содержимое JS вместо использования статических тегов сценария, что сэкономило время, на которое я надеялся. :)
Изменить: если цель состоит в том, чтобы сначала загрузить другой ваш контекст, попробуйте поместить теги