setTimeout() 和setInterval() 是javascript中实现循环调用的两个重要方法:
(1) var timeoutID = setTimeout(excute.time);
这个函数的基本功能是设定在一段时间之后执行一段语句或者一个函数;
主要有两个参数:
excute 是需要在一段时间之后执行的js语句或者一个已定义的js函数function;
time 是设定的间隔时间,单位为ms;
返回值:
timeoutID 是返回的代指这个timeout计时器的id值,借用该id值可以使用clearTImeout()停用这个timeout
经常用到的一种使用setTimeout()的方式如下:
function cycle(){
// the funtion body
timeId = setTimeout('cycle()', 1000);
}
timeId = setTimeout('cycle()', 1000);
通过这种方式可以实现每过1000ms(=1s),执行依稀cycle函数的函数体部分
举个简单的例子,可以实现计数或者计时。
(2)var ID = setInterval(execute,time);
这个函数的基本功能是设定每过一段时间执行一次一段语句或者一个js函数;直到页面关闭或者使用clearInterval(ID)停止;
主要有两个参数:
excute 是需要周期执行的js语句或者一个已定义的js函数function;
time 是设定的周期间隔时间,单位为ms;
返回值:
ID 是返回的代指这个interval计时器的id值,借用该id值可以使用clearInterval()停用该interval
同样是最近在使用setTimeout() 函数的时候出现了一些问题
问题:使用setTimeout(func, time);之后并没有实现对应的功能
代码:
function send_video() {
var blob = send_blob;
if(!blob) return;
size = blob.size;
startIndex = 0;
plus = 10000;
console.debug('one chunk size: <', plus,="" '="">');
function inner_streamer() {
reader = new window.FileReader();
reader.onload = function (e) {
var send_data = new window.Uint8Array(e.target.result);
myconn.send({type:'video_seg',content:send_data});
startIndex += plus;
if (startIndex <=>
{
setTimeout('inner_streamer()',100);
}
else {
myconn.send({type:'video_com',content:'end'});
}
};
reader.readAsArrayBuffer(blob.slice(startIndex, startIndex + plus));
}
console.debug('begin to transfer data!');
inner_streamer();
}
原因: setTimeout()和setInterval()两个函数都有一个共同的特点:如果其执行的是一个js函数,该函数应是一个全局函数,而不能是某一函数内部的函数
解决方式:将内部的inner_streamer()提到send_video()函数的外面,同时使用全局变量来传递一些参数
联系客服