求大牛翻译这段Javascript代码的意思
var _ie=(function(){
var v=3, div=document.createElement('div'), all=document.getElementByTagName('i');
while(
div.innerHTML = '<!--[if gt IE '+ (++v) +']><i></i><![endif]-->',
all[0]
);
return v > 4 ? v : false;
}());
------解决方案--------------------这句:
_ie=function(){return v;}();
是定了一个匿名函数,并立刻调用,由 _ie 保留返回值
等同于
function noname(){
v = "test";
return v;
}
_ie=noname();
这句:
div.innerHTML = '<!--[if gt IE '+ (++v) +']><i></i><![endif]-->',
all[0]
化简
div.innerHTML = ''+ (++v) +'',all[0]
首先要了解逗号运算符:
它将先计算逗号左边的参数,再顺序计算右边的参数值。然后返回最右边参数的值。
*然后,很重要的一点,逗号运算符的优先比 = 小
所以,上述代码运行时的优先顺序是:
(div.innerHTML = ''+ (++v) +''),(all[0])
而 all[0] 作为 while 是否继续执行的条件
这句:
while(
div.innerHTML = '<!--[if gt IE '+ (++v) +']><i></i><![endif]-->',
all[0]
);
写成下面的样子容易懂些:
while([条件])
; //do nothing
难点都解释了,还有个问题,当 all[0] 为非空时, while(true) 死循环,估计写错了,改一下
while(
div.innerHTML = '<!--[if gt IE '+ (++v) +']><i></i><![endif]-->',
all[
v]
);
------解决方案--------------------这个地方貌似是判断 ie版本号的。。。
这个all=document.getElementByTagName('i') 这个很费解,为毛要用这个来做while循环的标记。这个完全没有关系啊。。