Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.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 webworker中的clearInterval不工作_Javascript_Html - Fatal编程技术网

Javascript webworker中的clearInterval不工作

Javascript webworker中的clearInterval不工作,javascript,html,Javascript,Html,我有一个网络工作者,工作很好 webworker.js: //portion of webworker.js self.onmessage = function(evt){ if(evt.data == "start"){ var i = 0; var mytimer = setInterval(function(){ i++; postMessage(i); },1000); } if

我有一个网络工作者,工作很好

webworker.js:

//portion of webworker.js
self.onmessage = function(evt){
    if(evt.data == "start"){
      var i = 0;
      var mytimer = setInterval(function(){
            i++;
            postMessage(i);
      },1000);
    }

    if(evt.data == "stop"){
       clearInterval(mytimer);
    }

}
但“清除间隔”不起作用。我遗漏了什么吗?

mytimer是您函数的本地计时器。如果希望它在对onmessage的调用中保持不变,则需要将其移动到某个外部作用域:

var mytimer;

self.onmessage = function(evt) {
    if (evt.data == "start") {
        var i = 0;

        mytimer = setInterval(function() {
            i++;
            postMessage(i);
        }, 1000);
    } else if (evt.data == "stop") {
        clearInterval(mytimer);
    }
};
mytimer是本地函数。如果希望它在对onmessage的调用中保持不变,则需要将其移动到某个外部作用域:

var mytimer;

self.onmessage = function(evt) {
    if (evt.data == "start") {
        var i = 0;

        mytimer = setInterval(function() {
            i++;
            postMessage(i);
        }, 1000);
    } else if (evt.data == "stop") {
        clearInterval(mytimer);
    }
};

正如其他人所说,问题在于mytimer变量的范围

如果要避免全局命名空间混乱,可以使用以下命令将其存储为静态变量:


正如其他人所说,问题在于mytimer变量的范围

如果要避免全局命名空间混乱,可以使用以下命令将其存储为静态变量:


删除mytimer之前的var部分。删除mytimer之前的var部分。这不是很干净。如果支持web工作人员,您就不能至少使用一个命名函数吗?这不是很干净。如果支持web workers,您不能至少使用一个命名函数吗?