定时器和ajax
JS中关于定时器,有两种: for(var i=0; i<5; i++){
setTimeout(function(){
console.log(i);
},0);
}
不妨想一下,这段代码的执行结果是多少. 年初去携程面试的时候,面试官给的题. 当时太青涩,只会吹牛,却不会庖丁解牛,自然被pass咯. 当时我给出的回答是 关于定时器要记住的最重要的事情是: 指定的时间间隔表示何时将定时器的代码添加到队列,而不是何时执行代码. - - -《JavaScript高级程序设计》(第三版) Page610 如果弄懂上面这句话,那道面试题就很好理解了. 在循环当中,肯定首要处理循环,所以每次循环后,定时器中的代码都被放入队列中,等待循环执行完毕,再执行队列中的 for(var i=0; i<5; i++){
(function(arg){
setTimeout(function(){
console.log(arg);
},0);
})(i);
}
这就利用了闭包函数的特性了,立即执行. 有了上面的基础后,再说个跟ajax有关的,请看代码: var xhr = new XMLHttpRequest();
xhr.open("get","js/jquery.min.js",true);
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
if (xhr.status == 200){
console.log("ajax");
}
}
}
xhr.send();
setTimeout(function(){
console.log("定时器");
},0);
打印顺序是什么呢? 定时器 ajax 其实这是合理的, setInterval 循环定时器就比较复杂了,之后有时间再写吧. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |