JavaScript -- 几道面试题
来源:互联网 发布:可以看央视的网络电视 编辑:程序博客网 时间:2024/06/04 23:20
第一题:
for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000 * i);}
经典题目,setTimeout 会延迟执行,当轮到执行 console.log 的时候,其实 i 已经变成 5 了,所以会没隔一秒输出一个5,共输出五个5。
第二题:
上面的题目怎样改可以输出0-4?
for (var i = 0; i < 5; i++) { (function(i) { setTimeout(function() { console.log(i); }, i * 1000); })(i);}
使用了闭包。
第三题:
for (var i = 0; i < 5; i++) { setTimeout((function(i) { console.log(i); })(i), i * 1000);}
这里给setTimeout传递了没有返回值的一个立即执行函数。相当于:
setTimeout(undefined, ...);
而立即执行函数则会马上执行。因此这道题会马上输出0-4。
BOSS题:
setTimeout(function() { console.log(1)}, 0);new Promise(function executor(resolve) { console.log(2); for( var i=0 ; i<10000 ; i++ ) { i == 9999 && resolve(); } console.log(3);}).then(function() { console.log(4);});console.log(5);
首先先碰到一个 setTimeout,于是会先设置一个定时,在定时结束后将传递这个函数放到任务队列里面,因此开始肯定不会输出 1 。
然后是一个 Promise,里面的函数是直接执行的,因此应该直接输出 2 3 。
然后,Promise 的 then 应当会放到当前 tick 的最后,但是还是在当前 tick 中。
因此,应当先输出 5,然后再输出 4 。
最后在到下一个 tick,就是 1 。
因此输出:2 3 5 4 1
阅读全文
0 0
- JavaScript -- 几道面试题
- Javascript 试题
- JavaScript this几道面试题及介绍
- JavaScript作用域及几道面试题
- 一道javascript面试题
- javascript面试题汇总
- CSS+JavaScript面试题
- CSS+JavaScript面试题
- javascript 面试题
- javascript面试题
- javaScript面试题大全
- JavaScript面试题
- javaScript面试题1
- javascript 面试题
- JavaScript面试题
- javaScript面试题
- javascript面试题-1
- javaScript面试题
- Maven仓库的简介,学习
- GCD相关知识点
- Kotlin简单实用方法既使用Kotlin优雅的开发Android应用
- 单向RNN和双向RNN在mnist数据集上的分类实验
- 最全最好用的Android Studio插件整理
- JavaScript -- 几道面试题
- STM32空闲中断+DMA解决接收不定长数据问题
- 命运
- C++容器——map
- Hybrid App
- 关于spring核心配置文件中的各项主要配置
- ElasticSearch 5.4 Linux安装教程
- 代码回忆录:PHP随笔
- 笨方法学python笔记(2)