首先看下面这个例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>setInterval()之坑</title>
</head>
<body>
<script type="text/javascript">
(function(){
var arr=[1,2,3,4,5,6];
var i=0;
var timer=setInterval("printNumber()",2000);
function printNumber(){
console.log(arr[i]);
i++;
if(i==arr.length) clearInterval(timer);
}
})();
</script>
</body>
</html>
很容易分析得出,这段代码的作用是每隔2秒输出arr数组里的元素。然而,真的可以输出吗???
我们先测试一下,如下图:
发现竟然报错了,明明定义了这个函数的啊!这是怎么回事呢?
追本溯源,原来这个定时器位于一个块级作用域里,如果第一个参数写成 "printNumber()" 这样的形式,注意有双引号,那么就会去调用window对象下的这个方法,而我们申明的printNumber()函数由于在块级作用域里,故不属于window的方法,所以就会找不到,就报错了!!!
那么怎么改呢?很简单,只需要写一个函数名就行了,也就是printNumber, 改成:setInterval(printNumber,2000);
或者直接改成下面的也可以:
<script type="text/javascript">
var arr=[1,2,3,4,5,6];
var i=0;
var timer=setInterval("printNumber()",2000);
function printNumber(){
console.log(arr[i]);
i++;
if(i==arr.length) clearInterval(timer);
}
</script>
这样,声明的printNumber函数就是window的一个方法了~~
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)