从另一个函数调用清除间隔函数而不传递间隔变量
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 中以使其正常运行:
我发现这个解决方案也有效:
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);
}
我需要从另一个函数中清除间隔
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 中以使其正常运行:
我发现这个解决方案也有效:
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);
}