日期:2014-05-16  浏览次数:20465 次

求大牛翻译这段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;
}());
javascript ie 判断ie版本

------解决方案--------------------
这句:
_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循环的标记。这个完全没有关系啊。。