setTimeout() 定时只执行一次
用法:
setTimeout( x , 1000 ); ===> 1000ms后执行x函数
x不能加();加括号后会立即执行 ,执行后返回值是undefined,执行顺序是先读()里的
setTimeout( x , 1000 );
function x(){
alert( 1 );
}
这里可以看成
var x = xxx;
setTimeout( x , 1000 ); ===>先执行x;
另一种写法
setTimeout( ' x() ' , 2000 )
会当成js字符串代码来读
字符串里可以写一段执行的代码( setTimeout、setInterval、eval() 这三种方法可以用这样写法)
例、
setTimeout( 'alert( 8888 );alert( 9999 )' , 2000 );
注意:用字符串这种方法时调用的x()是全局函数才可以
!function (){
setTimeout( 'a()',1000 );
function a(){
alert( 5 ); ===>报错:"a()"要是全局的
}
}();
setTimeout()调用函数且传参几种写法
一、
setTimeout( x , 2000 , 10 , 10 );
function x( a , b ){
alert( a+b ); ===>弹出20
}
二、
setTimeout( bind( null , 10 , 10 ),2000 );
三、
setTimeout( function(){
x( 10,10 );
},2000)
setInterval() 循环执行
括号里写法跟setTimeout一样
setInterval( x , 2000 );
function x(){
alert( 1 ); ===>循环每2秒执行一次;
}
注意:时间是没办法到0的,最短最低是浏览器的频率,浏览器刷新频率 13~20
setTimeout( function (){
alert( 2 );
},0 ) 先弹1再弹2 setTimeout延迟执行
alert( 1 ) ; ===>立即执行
清除定时器
clearTimeout();只执行一次时为什么还要清呢?因为一个网站如果测到你是vip就不用弹vip的广告;
clearInterval();
var t = setTimeout( function(){
alert( 5 );
} , 5000 );
document.onclick = function (){
clearTimeout( t );
}
setInterval 特殊调用
setInterval( fn() , 1000 ) //fn()马上会执行,下面函数返回的是fn 执行完函数后变成 setInterval( fn , 1000 )
这里可以看 var a = fn() ===自执行后是fn 所以a=fn setInterval( a , 1000 )
function fn(){
num ++;
console.log( num );
return fn;
}
setTimeout代替setInterval
每隔13ms执行一次函数
假设要执行函数里的代码内容很多,多到下一次函数执之后还没完;
当用setInterval()时 只要时间一到就立马再调用里面的代码,不用等到所有代码执行完再调用;
setTimeout( function fn(){
alert( 1 );
setTimeout( fn , 1000); // 上面执行到这里马上会调用自己,再从重新执行一次;
},1000)
这个方法比setInterval好,它可以保证前面的代码执行完再调用;(再做动画的时候会用到;)
同步与异步
7点时在搬砖
8点时在搬砖
9点时在搬砖
9点老板过来说:晚上7点一起去吃饭
继续搬
.....
这时在搬砖的事就是同步的,晚上7点一起去吃饭属于异步,要等搬砖的事全部做完再去
setTimeout(function ( ) {
alert( 1 )
})
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
先打印a再弹窗 定时器是异步 要等同步做完才会做;
异步操作有:带src ajax 定时器
网友评论