如何处理 javascript 中的嵌套函数
How to deal with nested functions in javascript?
这可能是一个初学者问题,但我面临下一个情况:
$(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);
}
停止功能在按下按钮时停止图形,一切正常。按下按钮时,启动函数应重新启动图形。我的猜测是更新函数在启动函数中没有很好地调用。我怎样才能做到一切正常?
-
您当前已注释掉关闭
update
函数的}
,因此显示end f
的行实际上不会以f()
结尾。在当前状态下,您的代码将无法执行。(我注意到其他人编辑了您的代码,之后此评论不再有效;我不知道编辑是否更接近您的实际代码,或者它是否确实掩盖了真正的错误) -
你指的是
multiplecalls
和multipleCalls
.请注意,javascript 区分大小写。 -
您正在清除
multipleCalls
但从不将其设置为除null
以外的任何内容。你打算写multipleCalls = setTimeout(update, 1000)
吗? -
start
被放置在f
之外,将无法访问update
。要么定义update
及其在f()
之外依赖的功能,要么使其全局可访问,即window.update = function() { ... }
然后,您可以将其作为
setTimeout(window.update, 1000);
访问
您有一个范围问题。update
仅在f
内已知。
您正在尝试从外部f
start
调用它.实现此目的的唯一方法是将function update
公开到与start
所在的范围相同的范围,或者将start
带到与update
相同的范围。
第一个选项最简单(也是最丑陋的):
function update() {
//...
}
// assign it to the global scope (window is the global scope for browsers)
window.update = update;
现在update
可从"开始"获得。
更合适的方法是定义您的处理程序(例如,在f
范围内调用start
和stop
$(function f() {
//.. everything there now
$('.start').on('click', function(e) {
setTimeout(update, 1000);
});
});
工作示例
$(function f() {
var timer; // no need to be 'global'
function update() {
$('.result').text(new Date() + ' GetData();');
}
$('.start').on('click', function() {
// always clear a timer before setting it
clearTimeout(timer);
// and always set a timer variable, so it can be cancelled
timer = setTimeout(update, 1000);
});
$('.stop').on('click', function() {
// cancel the timer
clearTimeout(timer);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class=start>start</button>
<button class=stop>stop</button>
<div class=result>..</div>
你可以试试这个:
window.update = function update() {...}
然后:
setTimeout(window.update, 1000);
相关文章:
- 用嵌套函数和默认函数定义函数
- d3中堆栈函数和嵌套函数之间的差异
- JavaScript 中的嵌套函数和 “this” 关键字
- Javascript中带有返回值的嵌套函数
- 访问嵌套函数结构中的JavaScript父函数变量
- 从嵌套函数访问函数属性
- 如何在javascript中使用嵌套函数作为生成器(使用“inner”yields)
- Javascript嵌套函数属性继承
- 我对“;返回true"嵌套函数内部;t工作
- JS中的嵌套函数
- 如何在嵌套函数中获取$(this)
- Jasmine中返回Deferred的模拟嵌套函数
- 如何在嵌套函数jquery上保持变量的值不变
- JavaScript中的深度嵌套函数
- Jquery从嵌套函数返回
- 使用'这'在类中的嵌套函数中
- 如何从上面的嵌套函数返回
- 从JavaScript中的嵌套函数返回值
- Javascript OOP-从函数返回一个值;s在对象内部's方法(嵌套函数)
- Javascript对象/名称空间-如何访问从嵌套函数添加的属性(包括示例)