从另一个函数调用清除间隔函数而不传递间隔变量

call clear interval function from another function without pass the interval variable

我需要从另一个函数中清除间隔

window.onload = function(){

    var interval = null;

    interval = setInterval(function(){
        myFunction();
    }, 1000);

    function stop(){
        clearInterval(interval);
    }

}

不传递区间变量

stop();

但我无法让它工作:当我调用 stop(); 时,间隔继续...

我该怎么办?

您可以简单地在函数外部 JavaScript 的开头放置类似 var interval = null; 的内容。

一切都与变量范围有关。在函数内部定义的变量仅在该函数内可用。在函数或对象之外定义的变量将对所有函数全局可用。

What is the scope of variables in JavaScript?

有一个意想不到的 window.stop 函数,它已经存在于您的函数中。
这是另一个证明 global variables/functions 是邪恶的。

可能会调用此函数而不是您的函数,具体取决于加载脚本的时间。

尝试将您的函数放在一个对象中以保护命名空间:

它适用于 Whosebug fiddle:

var i = 0;

function myFunction() {
  i++;
  console.log(i);
}

var interval = null;

interval = setInterval(function() {
  myFunction();
}, 1000);

var myObject = {
  stop: function() {
    console.log("stopping");
    clearInterval(interval);
  }
};
<button onclick="myObject.stop();">stop</button>

在错误的jsFiddle中,你在iframe中获取东西,意思是window元素不一样。这就是为什么不调用您的函数的原因。这给了你那种错误:

您可以将您的脚本放在 html 中以使其正常运行:

jsfiddle

我发现这个解决方案也有效:

stop = function(){
    clearInterval(interval);
}

将您检查为答案的答案推定为错误。

即使有浏览器以编程方式支持加载停止命令,您的停止功能也不会起作用。

这个 [stop] 命令是一个 window 属性 并且可以被删除 and\or 可以被简单的变量声明或脚本中任意位置的同名函数覆盖.

您无法(从外部)调用停止函数的原因是因为它是一个 闭包

此致。

p.s.: 将它扔到全局范围内将使它起作用,visit you fiddle

var i=0;
function myFunction(){
    i++;
    $('i').html(i);
}

interval = null;

interval = setInterval(function(){
    myFunction();
}, 100);

stop = function(){
    clearInterval(interval);
}