如何处理javascript中的嵌套函数?
这可能是一个初级问题,但我面临的是下一种情况:如何处理javascript中的嵌套函数?,javascript,function,call,invoke,Javascript,Function,Call,Invoke,这可能是一个初级问题,但我面临的是下一种情况: $(function f() { function test2() { //..... } function GetData() { //..... } function update() { test2(); GetData(); //... }//end update update(); });//end f() function stop() { cle
$(function f() {
function test2() {
//.....
}
function GetData() {
//.....
}
function update() {
test2();
GetData();
//...
}//end update
update();
});//end f()
function stop() {
clearInterval(multipleCalls);
}
function start() {
multipleCalls=null; //this is a global variable
setTimeout(update, 1000);
}
当按下按钮且一切正常时,停止功能停止图形。按下按钮时,启动功能应重新启动图形。我的猜测是,在start函数中没有很好地调用update函数。我怎么能做到一切都好呢?- 您当前已注释掉关闭
函数的更新
,因此表示}
的行实际上并没有结束结束f
。在当前状态下,代码将不会执行。(我注意到有人编辑了您的代码,之后这句话就不再有效了;我不知道编辑是否更接近您的实际代码,或者它是否确实掩盖了一个真正的错误)f()
- 您指的是
和multiplecalls
。请注意,javascript区分大小写multiplecalls
- 您正在清除
,但从未将其设置为除multipleCalls
之外的任何值。您是否打算编写null
multipleCalls=setTimeout(更新,1000)
位于start
之外,无法访问f
更新。定义
及其在update
之外依赖的函数,或使其全局可访问,即f()
然后您可以通过window.update = function() { ... }
setTimeout(window.update,1000)访问它代码>
- 您有一个范围界定问题。
更新
仅在f
中已知
您正试图在start
中从外部调用它。实现这一点的唯一方法是将函数更新
暴露在与开始
相同的范围内,或者将开始
置于与更新
相同的范围内
第一种选择最简单(也最丑陋):
现在,update
可从`开始使用
更合适的方法是定义处理程序(例如,在f
范围内调用start
和stop
)
$(function f() {
//.. everything there now
$('.start').on('click', function(e) {
setTimeout(update, 1000);
});
});
工作示例
$(函数f(){
var timer;//无需为“全局”
函数更新(){
$('.result').text(新日期()+'GetData();');
}
$('.start')。在('click',function()上{
//设置计时器之前,请务必清除计时器
清除超时(计时器);
//并始终设置一个计时器变量,以便可以取消它
定时器=设置超时(更新,1000);
});
$('.stop')。在('click',function()上{
//取消计时器
清除超时(计时器);
});
});
开始
停止
..
您可以尝试以下方法:
window.update = function update() {...}
然后:
setTimeout(window.update, 1000);
为什么
update()
要调用自己?这并不能直接回答这个问题,但为了以后的参考,我一直被告知嵌套函数的形式应该是var funcname=function(){…}。这两种方法都可以,但它更有条理,看起来更干净。至少应该进行缩进。你猜对了,update
隐藏在f
中,从外部无法访问。什么是GetData
,它与你的问题有什么关系?那么test2
和update
呢?为什么multipleeCall
从未设置?为什么会有multiplecalls
和multiplecalls
?请检查是什么。Hedlung这是我对multiplecalls的错误。Rogier,非常感谢你的示例。我有另一种类型的按钮,所以事情有点不同。那么,这些示例是否有助于你理解实际问题和可能的解决方案争议?如果没有,请告诉我如何进一步澄清。
setTimeout(window.update, 1000);