setTimeout面试题
一.考察闭包
// 输出全为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面试题相关推荐
- [面试题]事件循环经典面试题解析
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
- 《深入理解ES6》笔记——块级作用域绑定(1)
本章涉及3个知识点,var.let.const,现在让我们了解3个关键字的特性和使用方法. var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方 ...
- 热乎的滴滴前端面经「现在实习生面试也不简单呀」
滴滴前端实习面经 滴滴是我投简历之后第二家面试的公司, 国庆节前两三天投的简历, 国庆后复工第一天就给我打了电话约一面. 那时候因为还没什么面试经验,所以一面有些紧张,很多题虽然是八股题, 但因为都是 ...
- 前端面试 | JavaScript知识点 | 课程笔记
前端面试课程笔记 以上方链接内课程内容为主,知识点可能不全面,仅作为自用备忘 Ch3 作用域和闭包 3.1 作用域和自由变量 题目: this的不同应用场景,如何取值? 手写bind函数 实际开发中闭 ...
- 一份热乎乎的滴滴前端面经
关注若川视野,回复"pdf" 领取资料,回复"加群",可加群长期交流学习 滴滴前端实习面经 滴滴是我投简历之后第二家面试的公司, 国庆节前两三天投的简历, 国庆 ...
- 关于setTimeout的一道经典面试题
想必大家都见过这一道经典的面试题: for (var i = 1; i <= 5; i++) {setTimeout(function test() {console.log(i) // 依次输 ...
- 关于setTimeout和setInterval的面试题
关于setTimeout和setInterval的面试题 var timer=setTimeout(function(timer){ console.log(timer); timer+=1; con ...
- 面试题--promise和setTimeout的输出顺序
面试题–promise和setTimeout的输出顺序 下面一段代码是在网上看到的一段关于promise和setTimeout的输出顺序的代码,下面做一下解答,有兴趣的百度自行了解js的执行机制(包括 ...
- Promise和setTimeout执行顺序 面试题
看到过下面这样一道题: (function test() {setTimeout(function() {console.log(4)}, 0);new Promise(function execut ...
最新文章
- Hadoop集群搭建(九:各服务的启动)
- 30岁之前必须明白的道理(你现在知道此生无憾了)
- source tree 递归子模块_每日刷题3--漫谈二叉树的递归遍历
- 第22件事 产品规划和运营规划
- CodeForces - 1363E Tree Shuffling(树上贪心)
- 大数据之-入门_大数据特点(4V)---大数据之hadoop工作笔记0003
- XP 装 sql 2008 允许远程连接
- python入门代码-Python入门学习系列——Python代码测试
- java计算器用什么布局_求JAVA语言写的计算器的代码。用GridLayout布局。
- Liferay中配置MySQL数据库的两种方法
- Lucene.Net
- 微信小程序python人工智能回复_用python itchat写一个微信机器人自动回复
- 我,是广工的一名电商男孩。喜欢唱跳 rap 我们终究会遇见 有缘 李伟鸿
- Linux(七,八)SHELL解释器、用户和用户组管理详解
- 国家信息化体系六要素
- 量化投资为什么用python_1、量化投资—为什么选择Python?
- vue怎么点击获取当前元素
- 【网络收录】基于51单片机开发音乐播放器
- 【Java习题】判断体重指数
- android iconfont xml,Android IconFont
热门文章
- python绘制笛卡尔心形曲线_如何在python的极图中显示笛卡尔系统?
- 计算机中寄存器的定义,寄存器电路
- FM原理详细介绍(写得很好)
- “驱动器中的磁盘未被格式化”错误的解决方法
- 彻底解决Kali Linux无法定位软件包!!!
- 我的故事--之我的名字
- swift3 设置设备方向支持(supportedInterfaceOrientations)
- H5端 水印相机,可压缩
- 【已阅】Linux命令行操作/选项介绍,文件分类/内容与属性/绝对相对路径,隐藏文件与整个目录结构
- 申请商标变更的注意事项有哪些?