Javascript 具有参数的函数的clearTimeout

Javascript 具有参数的函数的clearTimeout,javascript,setinterval,clearinterval,Javascript,Setinterval,Clearinterval,我正在编写一个聊天应用程序,可以同时打开多个聊天窗口。每次打开窗口时,我都会调用函数update_chat()上的setInterval,该函数会更新单个聊天窗口。我将聊天室id传递给更新聊天室() chat\u id只是聊天室的id。因此,我可以让功能update\u chat以不同的间隔运行多次,具体取决于打开的聊天次数。开始聊天很好 我的主要问题是如何停止上述间隔。我不想停止所有的时间间隔,只想停止与特定聊天相关的时间间隔。我试过这个 clearInterval("update_chat(

我正在编写一个聊天应用程序,可以同时打开多个聊天窗口。每次打开窗口时,我都会调用函数update_chat()上的setInterval,该函数会更新单个聊天窗口。我将聊天室id传递给更新聊天室()

chat\u id
只是聊天室的id。因此,我可以让功能
update\u chat
以不同的间隔运行多次,具体取决于打开的聊天次数。开始聊天很好

我的主要问题是如何停止上述间隔。我不想停止所有的时间间隔,只想停止与特定聊天相关的时间间隔。我试过这个

clearInterval("update_chat("+chat_id+")");
但它什么也没做


我试过了

var聊天时间间隔=[]

chat_interval[chat_id]=setInterval(“更新_chat”(“+chat_id+”),4000)

clearInterval(聊天间隔[end\u id])

它没有停止间隔

clearInterval
()将间隔ID作为参数,以了解要清除的间隔
setInterval
()在调用时返回一个interval ID,因此您将其存储在var中,并在希望清除该ID时将其传递给
clearInterval

//start the interval, store its ID
var interval_id = setInterval( function () { /* do something*/ }, 1000);

//clear the interval
clearInterval(interval_id);
请注意,
setTimeout
()和
cleartimout
()的工作方式相同

还要注意的是,虽然
setInterval
可以使用字符串参数作为要运行的函数,但它也可以使用实际函数(这是非常首选的)。因此,您的代码可以更好地编写为:

var update_chat_interval = setInterval(function () {
    update_chat(chat_id);
}, 4000);

// to clear it later:
clearInterval(update_chat_interval);
clearInterval
()将区间ID作为参数,以了解要清除的区间
setInterval
()在调用时返回一个interval ID,因此您将其存储在var中,并在希望清除该ID时将其传递给
clearInterval

//start the interval, store its ID
var interval_id = setInterval( function () { /* do something*/ }, 1000);

//clear the interval
clearInterval(interval_id);
请注意,
setTimeout
()和
cleartimout
()的工作方式相同

还要注意的是,虽然
setInterval
可以使用字符串参数作为要运行的函数,但它也可以使用实际函数(这是非常首选的)。因此,您的代码可以更好地编写为:

var update_chat_interval = setInterval(function () {
    update_chat(chat_id);
}, 4000);

// to clear it later:
clearInterval(update_chat_interval);

不要将字符串传递到
setInterval
@德里克朕會功夫 为什么不呢?我必须给那个函数传递一个参数。否则我如何才能将参数获取到函数中?因为传递字符串与使用
eval
相同。传递参数的正确(安全)方法是在其周围封装一个匿名函数。不要将字符串传递到
setInterval
@德里克朕會功夫 为什么不呢?我必须给那个函数传递一个参数。否则我如何才能将参数获取到函数中?因为传递字符串与使用
eval
相同。传递参数的正确(安全)方法是在其周围包装一个匿名函数。@Gilberg在更新的代码中,您将ID设置为
chat\u interval[chat\u ID]
,但将
chat\u interval[end\u ID]
返回到
clearInterval
。为清楚起见,您使用了chat_id,然后是end_id。此外,在您对问题的评论中,您询问了如何避免将字符串传递给
setTimeout
setInterval
。我的答案的最后一部分告诉你了。@Gilberg在更新的代码中,你将ID设置为
chat\u interval[chat\u ID]
,但你将
chat\u interval[end\u ID]
返回到
clearInterval
。为清楚起见,您使用了chat_id,然后是end_id。此外,在您对问题的评论中,您询问了如何避免将字符串传递给
setTimeout
setInterval
。我回答的最后一部分告诉你怎么做。