嘿,我正在创建DOM javascript库,发现自己遇到以下问题:
例如,如果我使用一个函数,说function update()
,我如何检查该函数是否已在另一个文件上创建;如果它是在另一个文件上创建的,该如何使它运行一次或每隔几秒钟,而无需用户执行此操作?
例如,在库p5.js中:
//If this function has created on this file it will run every one second
function update(){
}
&&
//if this function has created on this file it will call itself once the page is loaded
function start(){
}
*编辑:试图更加清楚我的问题,谢谢您的回答!
答案 0 :(得分:1)
用户无需调用setInterval()
来重复update()
,而是可以自行调用。
function update() {
setInterval(function() {
// do something
}, 1000);
}
所有实际需要完成的工作都放在// do something
所在的位置。
答案 1 :(得分:0)
setTimeout(func, 1000)
将在1000毫秒后调用func
。
如果您希望函数立即调用,则可以进行递归(不好的方法,最好使用循环,但这对于说明下一个示例很有用):
// calls itself infinitely, without any delay
function update(){
update(); // Will cause a stack overflow, infinitely deep recursion
}
现在,您可以使用setTimeout
并告诉update
再运行一秒钟。
// calls itself infinitely, 1 second delay between calls
function update(){
setTimeout(update, 1000);
}
这里没有递归。而是将呼叫延迟update()
一秒钟。第二次调用update()
时,将再次调用另一个setTimeout
,依此类推,以此类推。
问题的第二部分:
//call itself once the page is loaded
function start(){
}
您可以在页面加载时设置事件监听器,然后调用该函数:
window.addEventListener('load', start);
在定义start()
之后立即执行此操作。
要反映您的评论:
如果要检测是否已经定义了全局函数update
(可能是由用户定义的),并且想要以1秒的相等间隔自动开始调用它,则需要使用以下命令检查其存在性: typeof
,然后在其上应用setInterval
:
if(typeof update === "function") {
setInterval(update, 1000);
}
要明确指出您要引用的是全局update
而不是局部变量,可以改用window.update
。在这种情况下,您还可以通过以下方式检查它是否存在:
if(update in window)