一.考察闭包

// 输出全为10

for(var i=0;i<10;i++){

setTimeout(function(){

console.log(i);

},50);

}

答1:使用闭包

for(var i=0;i<10;i++){(function(i){setTimeout(function(){console.log(i);},50);})(i);}

答2.使用ES6块级作用域

for (let i = 0; i < 5; i++) {setTimeout(() => {console.log(i);}, 1000);}

二、考察异步

问下面console.log的顺序

var arr = [1000,2000,1000];

for (let j = 0; j < arr.length; j++) {

setTimeout(() => {

console.log(j);

}, arr[j]);

}

答:

0,2,1

问:如何使上面console.log按顺序执行?

答:使用递归

​
var i = 0;
function isfun() {  //your code here 把逻辑写在settimeout里,用递归的方式//-----console.log(i);let docs = [1000, 2000, 1000];(++i < 3) && setTimeout("isfun()", docs[i - 1]);    /*或者通俗点这样写i++;if(i<30){setTimeout("isfun()", 3000);}*/
}​

改进:减少全局变量

function isfun2(k = 0) {   //your code here 把逻辑写在settimeout里,用递归的方式//-----console.log(k);let docs = [1000, 2000, 1000];(++k < 3) && setTimeout(() => {isfun2(k)}, docs[i - 1]);/*或者通俗点这样写i++;if(i<30){setTimeout("isfun()", 3000);}*/
}

三、编程题

题目:实现一个类,使每隔指定的秒数执行对应的console.log

new Queue()

.task(() => {

console.log(1)

}, 1000)

.task(() => {

console.log(2)

}, 2000)

.task(() => {

console.log(3)

}, 1000)

.run()

答:

class Queue {args = [];_self = this;task(fn,time) {this.args.push([fn,time]);return this._self;};run(k = 0) { let that = this;that.args[k][0]();(++k < that.args.length) && setTimeout(() => {that.run(k)}, that.args[k][1]);}}

setTimeout面试题相关推荐

  1. [面试题]事件循环经典面试题解析

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  2. 《深入理解ES6》笔记——块级作用域绑定(1)

    本章涉及3个知识点,var.let.const,现在让我们了解3个关键字的特性和使用方法. var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方 ...

  3. 热乎的滴滴前端面经「现在实习生面试也不简单呀」

    滴滴前端实习面经 滴滴是我投简历之后第二家面试的公司, 国庆节前两三天投的简历, 国庆后复工第一天就给我打了电话约一面. 那时候因为还没什么面试经验,所以一面有些紧张,很多题虽然是八股题, 但因为都是 ...

  4. 前端面试 | JavaScript知识点 | 课程笔记

    前端面试课程笔记 以上方链接内课程内容为主,知识点可能不全面,仅作为自用备忘 Ch3 作用域和闭包 3.1 作用域和自由变量 题目: this的不同应用场景,如何取值? 手写bind函数 实际开发中闭 ...

  5. 一份热乎乎的滴滴前端面经

    关注若川视野,回复"pdf" 领取资料,回复"加群",可加群长期交流学习 滴滴前端实习面经 滴滴是我投简历之后第二家面试的公司, 国庆节前两三天投的简历, 国庆 ...

  6. 关于setTimeout的一道经典面试题

    想必大家都见过这一道经典的面试题: for (var i = 1; i <= 5; i++) {setTimeout(function test() {console.log(i) // 依次输 ...

  7. 关于setTimeout和setInterval的面试题

    关于setTimeout和setInterval的面试题 var timer=setTimeout(function(timer){ console.log(timer); timer+=1; con ...

  8. 面试题--promise和setTimeout的输出顺序

    面试题–promise和setTimeout的输出顺序 下面一段代码是在网上看到的一段关于promise和setTimeout的输出顺序的代码,下面做一下解答,有兴趣的百度自行了解js的执行机制(包括 ...

  9. Promise和setTimeout执行顺序 面试题

    看到过下面这样一道题: (function test() {setTimeout(function() {console.log(4)}, 0);new Promise(function execut ...

最新文章

  1. Hadoop集群搭建(九:各服务的启动)
  2. 30岁之前必须明白的道理(你现在知道此生无憾了)
  3. source tree 递归子模块_每日刷题3--漫谈二叉树的递归遍历
  4. 第22件事 产品规划和运营规划
  5. CodeForces - 1363E Tree Shuffling(树上贪心)
  6. 大数据之-入门_大数据特点(4V)---大数据之hadoop工作笔记0003
  7. XP 装 sql 2008 允许远程连接
  8. python入门代码-Python入门学习系列——Python代码测试
  9. java计算器用什么布局_求JAVA语言写的计算器的代码。用GridLayout布局。
  10. Liferay中配置MySQL数据库的两种方法
  11. Lucene.Net
  12. 微信小程序python人工智能回复_用python itchat写一个微信机器人自动回复
  13. 我,是广工的一名电商男孩。喜欢唱跳 rap 我们终究会遇见 有缘 李伟鸿
  14. Linux(七,八)SHELL解释器、用户和用户组管理详解
  15. 国家信息化体系六要素
  16. 量化投资为什么用python_1、量化投资—为什么选择Python?
  17. vue怎么点击获取当前元素
  18. 【网络收录】基于51单片机开发音乐播放器
  19. 【Java习题】判断体重指数
  20. android iconfont xml,Android IconFont

热门文章

  1. python绘制笛卡尔心形曲线_如何在python的极图中显示笛卡尔系统?
  2. 计算机中寄存器的定义,寄存器电路
  3. FM原理详细介绍(写得很好)
  4. “驱动器中的磁盘未被格式化”错误的解决方法
  5. 彻底解决Kali Linux无法定位软件包!!!
  6. 我的故事--之我的名字
  7. swift3 设置设备方向支持(supportedInterfaceOrientations)
  8. H5端 水印相机,可压缩
  9. 【已阅】Linux命令行操作/选项介绍,文件分类/内容与属性/绝对相对路径,隐藏文件与整个目录结构
  10. 申请商标变更的注意事项有哪些?