在使用定时器函数的setInterval()的时候,可能会遇到这样的情况,明明感觉代码没有任何错误,但是使用setInterval()定时器函数循环执行指定函数的时候,却出现在指定作用域找不到函数的现象,下面就介绍一下出现此问题的原因。

代码实例如下:
   [ 其他 ] 运行代码    下载代码
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<meta name="author" content="https://www.51qianduan.com/" /> 
<title>51前端</title>  
<script type="text/javascript">    
window.onload=function(){
  var oshow=document.getElementById("show");
  var count=0;
  function done(){
    count=count+1;
    oshow.innerHTML=count;
  }
  setInterval("done()",1000);
}
</script>
</head> 
<body>
<div id="show"></div>
</body> 
</html>
上面的代码会报错,说函数done()没有定义,这是因为当使用字符串作为setInterval()第一个参数的时候,它的处理方式有点类似于在表中浏览器的window.eval(),总是在全局作用域查找函数,所以作为局部作用域中的done()函数无法被查找到。

代码修改如下:
   [ 其他 ] 运行代码    下载代码
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<meta name="author" content="https://www.51qianduan.com/" /> 
<title>51前端</title>  
<script type="text/javascript">  
var count=0;
var oshow
function done(){
  count=count+1;
  oshow.innerHTML=count;
}  
window.onload=function(){
  oshow=document.getElementById("show");
  setInterval("done()",1000);
}
</script>
</head> 
<body>
<div id="show"></div>
</body> 
</html>

代码描述:setInterval()调用 其他函数报错。setInterval()调用其他函数报错源码下载



100 133



用户评论
大牛,别默默的看了,快登录帮我点评一下吧!:)      登录 | 注册



×
×
51前端

注册

×
绑定手机

请绑定手机号,在继续操作

×
单次下载支付

应付金额:279

支付完成后,回到下载页面,在进行下载

官方QQ群
意见反馈
qq群

扫描上面二维码加微信群

官方QQ群

jQuery/js讨论群
群号:642649996
Css3+Html5讨论群
群号:322131262

加群请备注:从官网了解到