从另一个函数调用clear interval函数而不传递interval变量

时间:2016-05-25 13:51:12

标签: javascript clearinterval

我需要清除其他功能的间隔

jsFiddle

window.onload = function(){

    var interval = null;

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

    function stop(){
        clearInterval(interval);
    }

}

没有通过区间变量

stop();

但是我无法使其发挥作用:当我呼叫stop();时间隔继续......

我该怎么办?

4 个答案:

答案 0 :(得分:2)

有一个意外的window.stop功能,它预先存在于您的身上 这是全球变量/功能是邪恶的另一个证据。

根据加载脚本的时间,可能会调用此函数而不是您的函数。

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

它适用于StackOverflow小提琴:

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中的东西,意思是窗口元素不一样。这就是为什么不调用你的函数的原因。这会给你带来那种错误:

enter image description here

您可以将脚本放在html中以使其正常工作:

jsfiddle

答案 1 :(得分:1)

您可以在函数外部的JavaScript开头添加类似var interval = null;的内容。

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

What is the scope of variables in JavaScript?

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

您检查为答案的答案的假设是错误的。

无论是否存在以编程方式支持load stop命令的浏览器,您的停止功能都无法正常工作。

这个[stop]命令是一个窗口属性,可以删除和/或被简单的变量声明或脚本上任何地方的同名函数覆盖。

你无法调用停止功能(来自外部)的原因是因为它是关闭

问候。

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);
}