setInterval()呼叫其他函式時候報錯

螞蟻小編發表於2017-03-25

在使用定時器函式的setInterval()的時候,可能會遇到這樣的情況,明明感覺程式碼沒有任何錯誤,但是使用setInterval()定時器函式迴圈執行指定函式的時候,卻出現在指定作用域找不到函式的現象,下面就介紹一下出現此問題的原因。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<meta name="author" content="http://www.softwhy.com/" /> 
<title>螞蟻部落</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()函式無法被查詢到。

程式碼修改如下:

[HTML] 純文字檢視 複製程式碼
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<meta name="author" content="http://www.softwhy.com/" /> 
<title>螞蟻部落</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>

上面的程式碼可以成功執行,這裡就不多介紹了,如有任何問題可以跟帖留言。

相關文章