js循环调用函数问题

JavaScript04

js循环调用函数问题,第1张

你这样子写相当于一次开启了10个计时器,因为for循环一下子就执行完了,然后就是在30秒后,会一下子输出10个带编号的时间。按照你的想法,应该是隔30秒,输出一个时间,时间前带有数组内的编号。为了方便演示,可以先用较短的时间作为时间间隔。

var arr=new Array(1,2,3,4,5,6,7,8,9,0),

delay=5000// 这里可以设置时间间隔,这里为5000ms=5s

function temp() {

var t=arr.shift()

document.write(t+"----"+(new Date()).getTime()+"<br />")

if(arr.length)

setTimeout("temp()",delay)

}

window.onload=function() {

temp()

}

js如下

<script>

function showCont()

{

var bt=document.getElementById("Play")

var s=document.getElementById("fla")

var f=document.getElementById("show")

if(s.style.display=="")

{

s.style.display="none"

f.style.display=""

bt.innerText="点击缩进全文"

}

else

{

s.style.display=""

f.style.display="none"

bt.innerText="点击展开全文"

}

}

</script>

【引申】:

1. 名叫 div 的变量有一个对 handler 的引用(因为 handler 是它的一个属性)

2. handler 也同样有一个对 div 的引用(因为 div 处于它的作用域内。这是js闭包的特性,函数内的代码可以引用函数外的变量)

3. 这就造成了循环引用,最后两个变量都不会被销毁,成了内存泄露

按照这个说法,像下面这样写代码就不会出现这种内存泄露了。

因为 div 变量不再处于 handler 函数的作用域之中。