Javascript检查是否已在其他文件上创建函数

时间:2018-09-08 17:15:03

标签: javascript

嘿,我正在创建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(){

}

*编辑:试图更加清楚我的问题,谢谢您的回答!

2 个答案:

答案 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)