为什么我的时钟不能第二次停止为什么clearInterval在第二次时间内不工作(javascript)

为什么我的时钟不能第二次停止为什么clearInterval在第二次时间内不工作(javascript),javascript,clearinterval,Javascript,Clearinterval,我刚从零开始学习用Javascript编码。 我一直在试着做一个时钟,一次点击就可以停止和启动。 我遇到了一个困扰我的问题: 当我第一次单击“停止”按钮时,时间确实停止了。 当我点击“开始”按钮时,时钟再次运行。 问题是: 当我第二次点击“停止”按钮时,时钟就会停止 不停 你能告诉我为什么会这样吗 var myclock=setInterval(“showtime()”,1000); 函数start(){ var myclock=setInterval(“showtime()”,1000)

我刚从零开始学习用Javascript编码。 我一直在试着做一个时钟,一次点击就可以停止和启动。 我遇到了一个困扰我的问题: 当我第一次单击“停止”按钮时,时间确实停止了。 当我点击“开始”按钮时,时钟再次运行。 问题是:

  • 当我第二次点击“停止”按钮时,时钟就会停止 不停
你能告诉我为什么会这样吗

var myclock=setInterval(“showtime()”,1000);
函数start(){
var myclock=setInterval(“showtime()”,1000);
}
函数停止(){
清除间隔(myclock);
}
函数showtime(){
var time_now=新日期();
var local_time=time_now.toLocalString();
document.getElementById(“time”).innerHTML=本地时间;
}

查看您的
启动功能:

var myclock = setInterval(...
您在此处定义了一个新变量,
stop
无法使用该变量。为了使其按预期方式工作,请删除
var

myclock = setInterval(...

案例1,
w
r
使用相同的变量(相同的名称和内存中相同的位置):

案例2,
w
r
使用不同的变量(名称相同,但内存中的位置不同):

在案例2中,
var
关键字创建一个新变量,该变量是
w
的本地变量,而
r
则继续读取旧的全局变量。这同样适用于您的代码。由于
var
关键字,
start
写入新的局部变量,而
stop
读取旧的全局变量。从
start
中删除
var
,以更新全局变量:

function start() {
  myclock = setInterval("showtime()", 1000);
}
下面是您的代码片段的一个固定版本和稍加改进的版本:

var-myclock;
start();
函数start(){
showtime();
myclock=设置间隔(显示时间,1000);
}
函数停止(){
清除间隔(myclock);
}
函数showtime(){
var time_now=新日期();
var local_time=time_now.toLocalString();
document.getElementById(“time”).innerHTML=本地时间;
}

首先,在
start
函数中再次声明变量
myclock
。当您在
stop
中引用
myclock
时,您引用的是外部变量,而不是
start
中的变量。这意味着清除不会清除
start
中设置的计时器

其次,每次单击
start
时,您都在重新创建计时器,而不清除前一个计时器

固定代码如下所示:

函数showTime(){
var timeNow=Date();
var localTime=timeNow.toLocalString();
document.getElementById(“time”).innerHTML=localTime;
}
var-myClock;
函数停止(){
清除间隔(myClock);
myClock=null;
}
函数start(){
如果(我的时钟)
return;//计时器已设置。无需重新创建。
myClock=设置间隔(显示时间,1000);
}
start()


请不要发布代码的图像。相反,请将您的代码直接复制并粘贴到问题正文中。谢谢您的回答!:)谢谢你的回答!:)
var x = 1;
function w () {
  var x = 2;
}
function r () {
  return x;
}
w();
r(); // 1
function start() {
  myclock = setInterval("showtime()", 1000);
}