这里我将会总结在携程笔试过程中遇到的选择题。
1:
for(var i =1;i<=3;i++){
setTimeout(function(a){
console.log(a);
}(i),0)
};
// 1
// 2
// 3
解析:
- 基础知识
setTimeout(func,s) 用于在指定的毫秒数后调用函数或计算表达式,停止该方法可使用 clearTimeout 方法。
setTimeout() 只执行一次func,如果要多次调用,可用 setInterval() 方法
- setInterval和setTimeout
setInterval() 可按照指定的周期(以毫秒计)来调用函数或计算表达式,停止该方法可使用 clearInterval() 方法。
// 每隔50毫秒就会执行一次 clock() 方法,即文本框中的数字每隔50毫秒改变一次
<button onclick="window.clearInterval(int)">停止 interval</button>
<input type="text" id="clock" size="50" />
<script>
var int = self.setInterval("clock()", 50);
function clock() {
var t = new Date();
document.getElementById("clock").value = t;
}
</script>
- 单线程的JavaScript & 异步的 setTimeout()
1.JavaScript是浏览器用来与用户进行交互、进行DOM操作的,这也使得它必须有单线程这一特性。
2.在JavaScript中任务有两种,一种是同步任务,一种是异步任务。
(1).同步任务:各个任务按照文档定义的顺序一一推入执行栈中,当前一个任务执行完毕,才会开始执行下一个任务。
(2).异步任务:各个任务推入任务队列中,只有在当前的所有同步任务执行完毕,才会将队列中的任务”出队”执行。(注:这里的异步任务并不一定是按照文档定义的顺序推入队列中)
(3).任务队列(event loop):理解为用于存放事件的队列,当执行一个异步任务时,就相当于执行任务的回调函数。一般异步操作包括 io(ajax获取服务器数据)、用户/浏览器自执行事件(onclick、onload、onkeyup等)以及定时器(setTimeout、setInterval)
console.log("1");
setTimeout(<