易错JavaScript编程题汇总(3)
来源:互联网 发布:去水印软件免费版 编辑:程序博客网 时间:2024/05/20 01:35
for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(new Date, i); }, 1000);}console.log(new Date, i);
A. 20% 的人会快速扫描代码,然后给出结果:0,1,2,3,4,5;
B. 30% 的人会拿着代码逐行看,然后给出结果:5,0,1,2,3,4;
C. 50% 的人会拿着代码仔细琢磨,然后给出结果:5,5,5,5,5,5;
答案其实是 C
如果我们约定,用箭头表示其前后的两次输出之间有 1 秒的时间间隔,而逗号表示其前后的两次输出之间的时间间隔可以忽略,代码实际运行的结果该如何描述?会有下面两种答案:
A. 60% 的人会描述为:5 -> 5 -> 5 -> 5 -> 5,即每个 5 之间都有 1 秒的时间间隔;
B. 40% 的人会描述为:5 -> 5,5,5,5,5,即第 1 个 5 直接输出,1 秒之后,输出 5 个 5;
循环执行过程中,几乎同时设置了 5 个定时器,一般情况下,这些定时器都会在 1 秒之后触发,而循环完的输出是立即执行的,显而易见,正确的描述是 B。
如果期望代码的输出变成:5 -> 0,1,2,3,4,该怎么改造代码?熟悉闭包的同学很快能给出下面的解决办法:
for (var i = 0; i < 5; i++) { (function(j) { // j = i setTimeout(function() { console.log(new Date, j); }, 1000); })(i);}console.log(new Date, i);
作者:王仕军
zhuanlan.zhihu.com/p/25855075
参照考点:JavaScript闭包
更多详情见:微信公众号 前端大全
阅读全文
0 0
- 易错JavaScript编程题汇总(3)
- 易错JavaScript编程题汇总(1)
- 易错javascript编程题汇总(2)
- 编程题汇总3
- Java面试编程题汇总(1)
- LintCode编程题汇总(更新中)
- java编程经验汇总(3)
- 编程基础理论题汇总
- 编程题汇总
- 编程题汇总1
- 编程题汇总2
- 编程题汇总4
- 编程题汇总5
- 《JavaScript语言精髓与编程实践》(第二版)相关资源汇总
- JavaScript高级程序设计(第3版)读书笔记汇总
- 《Javascript DOM编程艺术》第2版 知识点汇总
- javascript 汇总
- 【牛客网】算法编程题汇总
- java关键字之_abstract
- jq链式写法浅析
- android 的三种定位方式
- 设计模式(九):建造者模式
- 进程
- 易错JavaScript编程题汇总(3)
- 乘法
- java注解学习笔记
- int av_packet_ref(AVPacket *dst, const AVPacket *src)源码分析
- Java Socket编程----通信是这样炼成的
- c++跨平台Windows编程
- Python爬虫数据处理
- ZigZag Conversion
- Android 如何完整的获取到用户已安装应用列表