最近小弟看了关于js的值类型和引用类型,知道对象,函数都是引用类型,他们传的都是地址。但是下面这段代码让我很疑惑,大家帮忙看看我哪里理解偏差额?
<input type="button" id="btn" />
<script type="text/javascript">
    var btn = document.getElementById("btn");
    btn.onclick = function () {
        alert("aaaaaaa");
    }
    var btn2 = btn.onclick;//这里应该是一个引用传递
    btn.onclick = function () {
        alert("aaaaaaaaaaaaaaa");
    }
    btn1();//d但是这里不是应该输出aaaaaaaaaaaaaaa的吗?为什么还是aaaaaaa呢。我不明白。我明明已经把btn1.onclick的引用改成了输出aaaaaaaaaaaaaaa了呀。</script>

解决方案 »

  1.   

    写的什么跟什么啊。。完全没看懂。。btn1()这个在哪。。
      

  2.   

    经过测试,点击 按钮 输出的是  aaaaaaaaaaaaaaa;
    是不是 LZ  机子缓存的问题啊
      

  3.   

    LZ还是没有弄明白你自己说的东西btn.onclick = function () {
      alert("aaaaaaa");
    }
    这里是声明了一个匿名函数1,并将btn的onclick指向它var btn2 = btn.onclick 
    将声明的变量指向了btn.onclick所指向的那个匿名函数1。btn.onclick = function () {
      alert("aaaaaaaaaaaaaaa");
    }
    声明了匿名函数2,并将btn的onclick指向它虽然btn.onclick指向的对象变化了,但btn2指向的对象仍然是匿名函数1
      

  4.   

     应该是btn.oncilick最后会变成aaaaaaaaaaaaaaa,
    而btn.onclick传递到btn2时的是没有改变之前就传递的,
      

  5.   

    意思就是 你的btn.onclick是先传递到btn2的  后改变的,
    所以  输出的btn2 还是aaaaaaa,而不是aaaaaaaaaaaaaaa