You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中按钮停止倒计时报错:Uncaught ReferenceError: x is not defined

解决倒计时暂停功能的ReferenceError问题

你遇到的问题核心是变量作用域限制导致的引用错误——你在start()函数内部用var x声明了定时器变量,但这个变量只属于start函数的局部作用域,当你在暂停按钮的处理逻辑里尝试访问x时,JavaScript找不到这个变量,所以抛出了Uncaught ReferenceError: x is not defined。

问题根源拆解

你的代码里,x = setInterval(...)是用var在start()函数内部声明的,属于局部变量,作用域仅限start函数内部。当你点击暂停按钮去执行clearInterval(x)时,外部作用域没有名为x的变量,自然会报错。

快速修复方案:调整变量作用域

把x的声明移到start函数外部,让它处于暂停函数能访问到的作用域中(比如全局作用域,或者包含两个函数的共同作用域):

// 将x声明在全局/共同作用域,让暂停函数能访问到
let x; 

function start() {
  var table = document.getElementById("test");
  var row = table.insertRow(0);
  var cell1 = row.insertCell(0);
  cell1.colSpan = 2;
  var countDownDate = new Date("Apr 30, 2019 11:12:27").getTime();
  
  // 直接给外部的x赋值,不再用var声明
  x = setInterval(function() {
    // 你的倒计时逻辑代码...
  }, 1000);
}

// 示例暂停/停止函数
function pauseCountdown() {
  clearInterval(x);
}

更优雅的方案:避免全局变量污染

如果不想用全局变量,可以用闭包封装逻辑,既解决作用域问题,又不会污染全局环境:

const Countdown = (function() {
  let intervalId; // 仅在闭包内部可见的变量
  
  function start() {
    var table = document.getElementById("test");
    var row = table.insertRow(0);
    var cell1 = row.insertCell(0);
    cell1.colSpan = 2;
    var countDownDate = new Date("Apr 30, 2019 11:12:27").getTime();
    
    intervalId = setInterval(function() {
      // 你的倒计时逻辑代码...
    }, 1000);
  }
  
  function pause() {
    clearInterval(intervalId);
  }
  
  // 暴露对外的方法
  return { start, pause };
})();

// 使用方式
// Countdown.start(); // 启动倒计时
// Countdown.pause(); // 暂停倒计时

内容的提问来源于stack exchange,提问作者Raja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:37:26