setInterval变量不可访问

时间:2013-05-17 17:13:49

标签: javascript setinterval

var cnt1 = 0;
function initOctoView(){
   var newcnt1 = printAdsBox1(cnt1, imgPerBox1); // first time on first load
   var totalBoxes8 = setInterval(function() {
      newcnt1 = printAdsBox1(newcnt1, imgPerBox1); // all 5 sec
   }, 5000);
}

此函数由此调用:

if($('.octoView').length > 0){
    initOctoView();
}

到目前为止工作正常。

后来我有:

$(document).on('click', 'a.windowXL', function () {
   window.clearInterval(totalBoxes8);
}

但是这会返回未定义totalBoxes8。 我的错是什么?请指教!

3 个答案:

答案 0 :(得分:4)

使用var inside函数声明totalBoxes8 - totalBoxes8只能在此函数中访问本地变量。你可以把它变成全球性的:

var cnt1 = 0;
var totalBoxes8;
function initOctoView(){
     var newcnt1 = printAdsBox1(cnt1, imgPerBox1); // first time on first load
     totalBoxes8 = setInterval(function() {
          newcnt1 = printAdsBox1(newcnt1, imgPerBox1); // all 5 sec
      }, 5000);
}

答案 1 :(得分:0)

试试这个;

$(function(){

    var cnt1 = 0, totalBoxes8 ;
    function initOctoView(){
       var newcnt1 = printAdsBox1(cnt1, imgPerBox1); // first time on first load
       totalBoxes8 = setInterval(function() {
          newcnt1 = printAdsBox1(newcnt1, imgPerBox1); // all 5 sec
       }, 5000);
    }

   $(document).on('click', 'a.windowXL', function () {
      window.clearInterval(totalBoxes8);
   }
});

答案 2 :(得分:0)

totalBoxes8undefined,因为它在函数initCotoView()的范围内声明为 local ,因此 global 范围

您可以通过将其显式附加到全局window对象来声明 in 函数中的全局。类似的东西:

function foo() {
  window.myVar = 1; // declares a global
} 

foo(); // call the function to actually make the declaration

console.log(window.myVar); // the variable is accessible globally