循环/闭包/setTimeout/Promise 综合

  1. 控制台显示内容为?
for (var i = 0; i < 5; i++) {
  console.log(i);
}
  1. 控制台显示内容为?
for (var i = 0; i < 5; i++) {
  setTimeout(function() {
    console.log(i);
  }, 1000 * i);
}
  1. 控制台显示内容为?
for (var i = 0; i < 5; i++) {
  (function(i) {
    setTimeout(function() {
      console.log(i);
    }, i * 1000);
  })(i);
}
  1. 控制台显示内容为?
for (var i = 0; i < 5; i++) {
  (function() {
    setTimeout(function() {
      console.log(i);
    }, i * 1000);
  })(i);
}
  1. 控制台显示内容为?
for (var i = 0; i < 5; i++) {
  setTimeout((function(i) {
    console.log(i);
  })(i), i * 1000);
}
  1. 控制台显示内容为?
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);

六道题循序渐进的考察了很多东西.

原出处及答案点这里作者:Liril

时间: 2024-08-07 04:34:16

循环/闭包/setTimeout/Promise 综合的相关文章

循环闭包的影响以及其解决方案

上一次,我已经讲过闭包是如何形成的,以及它的用途.但是对于循环闭包产生的陷阱,和解决方案一笔带过啊(根本就没有)!本着不坑爹的思想,绝逼是要重新再梳理一遍.但无论如何还是要强调一下的,在闭包中会一直引用变量(是引用而不是副本),直到其断开连接不再引用,在内存中的闭包就可以得到释放.所以当我们知道这个道理之后,我们就可以开始我们今天的旅程了. 上次的例子举的不够好,竟然要操作DOM的,这次我们换个更直观的写法,用setTimeout函数. show code! 这一次使用的是定时器setTimeo

解读setTimeout,promise.then,process.nextTick,setImmediate的执行顺序

最近在看<Node.js调试指南>的时候遇到有意思的几道题,是关于setTimeout, promise.then, process.nextTick, setImmediate的执行顺序.今天抽空记录下这道题的分析过程及背后的原理与知识点. 题目如下: // 题目一: setTimeout(()=>{ console.log('setTimeout') },0) setImmediate(()=>{ console.log('setImmediate') }) // 题目二: c

JavaScript之全选/反选/取消,for循环闭包

需求:table中要求点击红色单元格和点击checkbox的效果一样,最后一行点击就是全选.反选.取消选择的效果. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> table{ width: 400px; height: 15px; backgrou

setTimeOut与循环闭包问题

function a() { for(let i=0;i<=5;i++){ setTimeout(function () { console.log(i) },i*1000); } } a(); 结果:0 1 2 3 4 5    结果每间隔1S输出 setTimeOut第二个参数设定xxms后执行,第一的参数是xxms后执行什么动作. 队列的数据结构特点: 这个队列的执行时间,需要等到函数调用栈清空后才开始执行,即所有的可执行代码执行完毕后才开始执行由setTimeOut定义的操作,这些操作进

js的for循环闭包问题

一个简单的例子,如果想循环输出数组中的每一个数值我们可以利用for循环来输出例如: <script type="text/javascript"> var arr=["a","b","c","d","e"]; for (var i=0;i<arr.length;i++){ document.write(arr[i]); } </script> 这是最常见不过

JS之经典for循环闭包问题解决方法

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="bootstrap.css"> </head><body> <div class="

ES6 class setTimeout promise async/await 测试Demo

class Person { async getVersion () { return new Promise((resolve, reject) => { setTimeout(function () { resolve('1.0'); // reject('fail') }, 1000); }) } } const start = async () => { var p = new Person(); const data = await p.getVersion(); console.l

js作用域for循环闭包问题

for(var i = 0;i<btnArr.length;i++){ btnArr[i].addEventListener('click',function(){ tabCardShow(i); }): } 普通的for循环,触发事件时传入的 i 的值一定是等于 btnArr.length ,i 的值停留在了循环执行完毕之后,并不符合初衷. 原因:i只作用于 for循环的作用域,所有 元素绑定时传入的都是该作用域的同一个 i 值,而 i 值停留在了循环最后一次的值上. for(var i =

js for循环闭包解决循环变量i遍历值

参考:http://www.cnblogs.com/syf/archive/2012/10/04/2711828.html 如下的html,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5. [html] view plaincopyprint? <html > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"