问题一:
js 运算符优先级 . 优先级要高于 new,但是请问为什么下面代码可以运行?还是我理解的优先级有问题。谢谢。var d = new Date().getDate();-------------------------
问题二:
    
<button onclick="func()">add</button>
<script> 
var div = document.createElement( 'div'),
    all = div.getElementsByTagName( 'i');
    
alert( all.length);
    
function func(){
    div.innerHTML += '<i>hello world</i>';
    alert( all.length);
}
</script>在点击 add 之后 alert 会递增?请问怎么理解,all 一直和 div 的 i 元素联系着?

解决方案 »

  1.   

    new 和 .(成员)运算符具有相同的右优先级,从左向右执行div.innerHTML += '<i>hello world</i>';你每次都加上了一个i对象。在内存中,对象的数目在增加
      

  2.   

    all = div.getElementsByTagName( 'i');
    执行之后给 div.innerHTML 赋的值阿?怎么改变 div.innerHTML 还能在 all 中体现出来?
      

  3.   

    对象的引用是按地址传递的,当查找all这个对象时,要找你定义的地址处,all的定义是div.getElementsByTagName( 'i');
    所以会重新计算
      

  4.   

    头一个问题,虽然不太应该想不明白,但毕竟钻研精神可嘉.
    只不过,很多时候,即便没有现成的理论指导,对于现实也必须自己去尽量理解.哪怕暂时是错误的理解.因为学习总有不同阶段.也因为在一生当中,不可能总是有人可以询问.也因为如果没有较多的独立学习能力,那永远不会真正大幅提高.第二个问题,说明你头脑已经晕转向了.
    div.innerHTML += '<i>hello world</i>';
    <i>递增有什么问题,如果不递增,才有问题.你在这里就是让<I>递增了嘛.所以,好好冷静和轻松一下吧.夜风渐凉,没事出去走走,或者早上起来呼吸点新鲜空气(我一直很向往,但这坏作息习惯是只有向往了).
      

  5.   

    1。具体原因也许可以从ECMA262规范中找到。这里说一下,如果Date后面不带括号,那么确实是(.)的优先级高于new。而括号也可以理解为函数调用,其优先级与(.)相同,new运算在实际过程中是包含了函数调用的,也许可以把这里当做一个特例来对待。
    然后你可以想一想,在现实当中,采用:
    new (Data().getDate());
    这种写法来实现“调用函数返回一个对象,然后将此对象的某个属性作为构造函数构造一个新的对象”这种功能的可能性有多大呢?2。具体原因应该可以从W3C DOM规范中找到。
    你可以理解为getElementsByTagName()方法返回的是一个符合条件的集合,此集合是随着DOM的变化实时更新的。
      

  6.   

    一语中的,“引用”是关键,虽然你的all在上面已经定义了,但是div.innerHTML += '<i>hello world</i>'改变了all指向的对象,all能不变化吗?
      

  7.   

    你需要了解下javascript中的
    Scope Chains
    这个概念
    建议你看看
    High.Performance.JavaScript
    这本书