<body>
<ul>
</ul>
<script>
var oUl=document.body.children[0]; //拿到body下的ul
for(var i=0;i<3;i++){
//每次给li赋值一个新的对象
var oLi=document.createElement('li');////////
oLi.innerHTML='现在是第'+i+'个';
oUl.appendChild(oLi);
}
//获取oUl下的'li'
var aLi=oUl.getElementsByTagName('li');
alert(aLi.length)//3
</script>
</body>
我的问题是:每次执行完下面这句赋值语句后,oLi原来保存的节点对象,不就没有了吗?为什么for循环过后,还是可以正常的创建3个li节点呢?谢谢!
var oLi=document.createElement('li');
按照大家的启发,画了个图。我这么理解对吧?
<
script>
var a = '';
for(var i=0; i<10; i++){
var b = i;
a += b;
}
alert(a);
</script>
楼主如果这段代码你能理解,那么你就应该也能明白你提出的问题.
我的问题是:每次执行完下面这句赋值语句后,oLi原来保存的节点对象,不就没有了吗?
再次赋值时只是让 oLi
这个变量指向了新创建出来的 li
节点, 它所保存的上一个值已经被appendChild
至 oUl
上了.
oLi是对象的引用,对它赋值没有更改对象本身。
oLi一直存在作用域中,在js是没有块级作用域的概念,等效的代码:
var oLi;
for(var i=0;i<3;i++){
//每次给li赋值一个新的对象
oLi=document.createElement('li');////////
oLi.innerHTML='现在是第'+i+'个';
oUl.appendChild(oLi);
}