首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

求大牛通译这段Javascript代码的意思

2013-09-22 
求大牛翻译这段Javascript代码的意思var _ie(function(){var v3, divdocument.createElement(div), a

求大牛翻译这段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循环的标记。这个完全没有关系啊。。

热点排行