v
хранит номер версии IE.Он инициализируется значением 3, поэтому цикл создает при каждой итерации строки, подобные приведенным ниже:
// v = 3
<!--[if gt IE 4]><i></i><![endif]-->
// v = 4
<!--[if gt IE 5]><i></i><![endif]-->
Если вас смущает эта часть:
+(++v)+
это просто означает, что в контекстеобъединить '<!--[if gt IE '
с увеличенным значением v
, а затем объединить вновь сформированную строку с ']><i></i><![endif]-->'
Оператор увеличения ++
действует на возвращать увеличенное значение v
, поскольку предшествует v
.Если оно пришло после v
, текущее значение v
будет возвращено до того, как произойдет увеличение.Mozilla лучше объясняет, чем я:
Этот оператор увеличивает (добавляет единицу) свой операнд и возвращает значение.Если используется постфикс, с оператором после операнда (например, x ++), то он возвращает значение до приращения.Если используется префикс с оператором перед операндом (например, ++ x), то он возвращает значение после увеличения.
, таким образом, первый созданный условный комментарий всегда равен 4. Цикл продолжается до div.getElementsByTagName('i')[0]
не возвращает никакого элемента DOM, оценивается как false
и вынуждает цикл завершиться.