setInterval全局var未定义

时间:2016-09-15 18:52:40

标签: javascript jquery

我有一个计时器:

 timer: function(duration, display) {
     var timer = duration, minutes, seconds;

     var interval = setInterval(function() {
         minutes = parseInt(timer / 60, 10);
         seconds = parseInt(timer % 60, 10);

         minutes = minutes < 10 ? "0" + minutes : minutes;
         seconds = seconds < 10 ? "0" + seconds : seconds;

         display.text(minutes + ":" + seconds);
         display.addClass('timed sticky');

         if (--timer < 0) {
             $('.btn.next').click();
         }
     }, 1000);
 }

当我使用var interval = ...时,它有效。但是当我尝试在没有var的情况下全局设置它时,它会显示Uncaught ReferenceError: interval is not defined。知道为什么吗?

1 个答案:

答案 0 :(得分:0)

因为您在严格模式下运行。

function strictMode() {
  'use strict';
  strictInterval = 1;
  console.log('strict mode');
}

function looseMode() {
  looseInterval = 1;
  console.log('loose mode');
}

looseMode();
strictMode();

无论如何,使用缺少var来创建全局变量是一个坏主意。如果要访问多个作用域中的变量,请在这些作用域之外声明它,或者提供在这些作用域之间共享数据的机制。

// Declared outside of both scopes
var shared = 1;
function a() {
  console.log(shared);
  shared = 2;
}

function b() {
  console.log(shared);
  shared = 3;
}

a();
b();
a();