最近小弟看了关于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>
<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>
是不是 LZ 机子缓存的问题啊
alert("aaaaaaa");
}
这里是声明了一个匿名函数1,并将btn的onclick指向它var btn2 = btn.onclick
将声明的变量指向了btn.onclick所指向的那个匿名函数1。btn.onclick = function () {
alert("aaaaaaaaaaaaaaa");
}
声明了匿名函数2,并将btn的onclick指向它虽然btn.onclick指向的对象变化了,但btn2指向的对象仍然是匿名函数1
而btn.onclick传递到btn2时的是没有改变之前就传递的,
所以 输出的btn2 还是aaaaaaa,而不是aaaaaaaaaaaaaaa