Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 除非清除间隔在间隔功能内,否则清除间隔不起作用_Javascript - Fatal编程技术网

Javascript 除非清除间隔在间隔功能内,否则清除间隔不起作用

Javascript 除非清除间隔在间隔功能内,否则清除间隔不起作用,javascript,Javascript,下面是一个简单的计数代码,可以使用setInterval从14计数到0。 3秒钟后,我想清除间隔并使用savedTimerCounter('stop')停止计数。 问题是我无法访问间隔以在savedTimerCounter('stop')清除它 为什么以及如何解决这个问题?我错过了什么 让savedTimer; 函数保存计时器(el){ //函数范围变量 开关(el){ 案例“开始”: 时间间隔=14; console.log(timeleft); savedTimer=setInterval

下面是一个简单的计数代码,可以使用
setInterval
从14计数到0。 3秒钟后,我想清除间隔并使用
savedTimerCounter('stop')停止计数。
问题是我无法访问间隔以在
savedTimerCounter('stop')清除它

为什么以及如何解决这个问题?我错过了什么

让savedTimer;
函数保存计时器(el){
//函数范围变量
开关(el){
案例“开始”:
时间间隔=14;
console.log(timeleft);
savedTimer=setInterval(函数(){
时间限制--;
console.log(timeleft);

如果(timeleft您的问题是变量的范围,让我们举个例子:

功能剂量测量(动作){
让定时器;
console.log(timer)//将始终未定义;
//现在我做点什么
开关(动作){
案例“开始”:
{
计时器='开始';
打破
}
案例“结束”:
{
计时器='结束'
打破
}
}
console.log(timer)//将始终是输入的大小写。
}
doSomething('start');//这是一个函数调用
console.log('------------');

doSomething('end');//这是另一个函数调用
首先:为什么要让该函数执行双重任务?只需使用清晰的代码,并使用单独的
startTimer()
stopTimer()
。也就是说,原因是“因为Javascript和许多其他语言中的变量作用域就是这样工作的”。如果将变量放入函数中,则函数退出时它将停止存在。下次调用函数时,它将在该新调用的执行范围内创建一个同名的新变量。Google“javascript变量范围”请仔细阅读,因为如果不了解作用域,您就不会编写大量的工作代码。此外,尽管有“糟糕的做法”在一般过程和OO编程中使用全局变量的标签,有时在某些语言中使用它们是有意义的。JavaScript,尤其是这段代码就是一个很好的例子。您可以使用
savedTimer
作为
savedTimerCounter
的参数,以避免使用全局变量,但在这种情况下,这不是典型的做法您可以保持全局性。这取决于您。在OO场景中,您将创建一个由所有类成员共享的类字段。