说到定时器,很多人都不陌生,觉得这个有什么说的,很简单的了,其实你真正的理解了它了吗? 定时器的返回值是什么?clearInterval和 null有什么区别,可能有些干了几年的都不知道,下面我以setInterval为例来依次说下:
1.定时器的返回值
定时器是有返回值得,返回值代表着是第几个定时器,类型是number类型,也可以用来取消定时器,它是定时器的唯一标识符。
var num = 1;
function fn() {
var timer = setInterval(function () {
console.log(num);
console.log(timer)
}, 1000);
};
fn();//1,1
timer的值一定是1,number类型,因为一直是这个定时器在不断的执行所以它的返回值始终是1,返回值的作用就是作为一个引用,指向setInterval,我们也可以用它来清楚定时器 clearInterval(timer)。再看下面代码,内容不变,只加了一个调用。
var num = 1;
function fn() {
var timer = setInterval(function () {
console.log(num);
console.log(timer)
}, 1000);
};
fn();//1,1
fn();//1,2
因为再一次调用了,出现了第2个定时器,所以当第2次调用时,timer的值变成了2,当然清除定时器你也可以直接用clearInterval(2);现在你知道定时器的返回值是什么了吧?返回值是一个数字,代表当前是第几个定时器而已。
1.定时器赋值为null和清除定时器不是用一个概念
很多人可能会误认为定时器复制为null就等于清楚了定时器,这个是个错误的理解。上面说了 timer只不过是setInterval的一个引用而已,你赋值timer为null,只不过是清除了timer这个变量,清除了timer的内存占用,setInterval还是存在的。看下面的代码:
var num = 1;
function fn() {
var timer = setInterval(function () {
console.log(num);
timer = null;
console.log(timer);
}, 1000);
};
fn();//1,null 1,null 1,null .....
赋值了timer为null 但是还是一直输出1,就说明定时器更本没有清除。清除定时器只能用clearInterval(timer)。
var num = 1;
function fn() {
var timer = setInterval(function () {
console.log(num);
console.log(timer);
clearInterval(timer);
}, 1000);
};
fn();//1,1
这样就只输出一次1,1,因为后面清除了定时器。在页面创建了大量的自定义对象,但是调用后内存无法释放,即使刷新或跳到其它页面,内存仍然没有清空,只有关闭浏览器,内存才释放,长时间使用系统会造成客户端报“虚拟内存不足,所以很多人会清除了定时器再赋值null可以释放内存占用。
var num = 1;
function fn() {
var timer = setInterval(function () {
console.log(num);
clearInterval(timer);
timer =null;
}, 1000);
};
fn();//1