几道好玩的JS题目,看看你能答中几道。

1,for (var i = 0; i < 5; i++) {

  console.log(i);

  }

这几行代码会输出什么?

输出 0 1 2 3 4

2,for (var i = 0; i < 5; i++) {

  setTimeout(function() {

  console.log(i);

  }, 1000 * i);

  }

会输出什么?

输出5次5

3,那应该怎么改才能把上面的代码输出 0 到 4 呢?加个闭包函数即可

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

  (function(i) {

  setTimeout(function() {

  console.log(i);

  }, i * 1000);

  })(i);

  }

4,把i 去掉会输出什么?

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

  (function() {

  setTimeout(function() {

  console.log(i);

  }, i * 1000);

  })(i);

  }

这样子的话,内部其实没有对 i 保持引用,其实会变成输出 5次5。

6,再改成这样,会输出什么?

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

  setTimeout((function(i) {

  console.log(i);

  })(i),i * 1000);

  }

应该是立马输出 0 到 4

7,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);

这道题应该考察我 JavaScript 的运行机制的,让我理一下思路。

首先先碰到一个 setTimeout,于是会先设置一个定时,在定时结束后将传递这个函数放到任务队列里面,因此开始肯定不会输出 1 。

然后是一个 Promise,里面的函数是直接执行的,因此应该直接输出 2 3 。

然后,Promise 的 then 应当会放到当前 tick 的最后,但是还是在当前 tick 中。

因此,应当先输出 5,然后再输出 4 。

最后在到下一个 tick,就是 1 。

“2 3 5 4 1”

原文地址:https://www.cnblogs.com/lvqiupingboke-2019/p/12090742.html

时间: 2024-08-07 14:19:00

几道好玩的JS题目,看看你能答中几道。的相关文章

75道阿里Java面试题,你能答上几道?

整理了下阿里近几年的java面试题目,大家参考下吧,希望对大家有帮助,可以帮大家查漏补缺. 答对以下这些面试题,可以淘汰掉 80 % 的求职竞争者. 1.hashcode相等两个类一定相等吗?equals呢?相反呢? 2.介绍一下集合框架? 3.hashmap hastable 底层实现什么区别?hashtable和concurrenthashtable呢? 4.hashmap和treemap什么区别?低层数据结构是什么? 5.线程池用过吗都有什么参数?底层如何实现的? 6.sychnized和

js url传值中文乱码之解决之道

因为js url在传值的过程中使用的是js自己默认的字符集编码规则,我们必须把它转成属于我们自己的编码规格 在websphere 中使用的是url=encodeURI(encodeURI(url)); //用了2次encodeURI 测试成功,第一次转换没有尝试, 处理方法一. js 程序代码:url=encodeURI(url);注意是整个URL 服务器端的代码:String linename = new String(request.getParameter("name").get

一些JS题目的解法

题目是从http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html看到的. 答案参考了文章的评论,也有自己的一些改进. 1.找出数字数组中最大的元素(使用Mach.max函数) Math.max.apply(null,[1,2,3]); 2.转化一个数字数组为function数组(每个function都弹出相应的数字) [1,2,3].map(function(x){return function(){return x;};}); 3

js坑爹笔试题目汇总(持续更新中)

把你的面试官问倒,你就是一个合格的面试者了,下面总结一些易错的js笔试题目,会持续更新中,欢迎关注 1,考察this var length = 10 function fn(){ alert(this.length) } var obj = { length: 5, method: function(fn) { fn() // ? arguments[0]() // ? } } obj.method(fn) 这里的坑主要是arguments,我们知道取对象属于除了点操作符还可以用中括号,这里fn

12道人工智能领域的题目

12道人工智能领域的题目,答题的过程让大家都get到新姿势了吗? 在收到的48个回答中,有两位读者全部答对,真的是非常厉害啦! 今天,就让我们一起回顾一下题目,并看看正确答案的解释吧! 1.人工智能历史上第一个战胜人类的棋类游戏是? A.国际象棋 B.围棋 C.西洋双陆棋 D.四国军棋 1979年,由Hans Berliner(1929-2017)开发的一个西洋双陆棋程序,以7:1的成绩击败了当时的世界冠军Luigi Villa.创下了计算机第一次在智力游戏中击败冠军级别人类竞争对手的历史. 2

js实现随机选取[10,100)中的10个整数,存入一个数组,并排序。 另考虑(10,100]和[10,100]两种情况。

1.js实现随机选取[10,100)中的10个整数,存入一个数组,并排序. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script type="text/java

js如何计算一个字符在字符串中出现的次数

js如何计算一个字符在字符串中出现的次数:在实际应用中可能要计算一个字符在字符串中出现的次数,实现此功能的方式有多种,下面就介绍一个非常简单的方式.代码实例如下: function func(str,char) { var str=str; var num=(str.split(char)).length-1; return num } document.write(func("abcdefga","a")); 以上代码可以实现计算一个字符串中指定字符出现的次数.相

与正则有关的JS方法结合其在项目中的应用

与正则有关的JS方法结合其在项目中的应用 前言 最近项目中用到正则匹配比较多,因此打算深入理解和总结下各个与正则有关的方法,再结合在项目中使用的情况.与正则有关的JS方法共有7个,分别是RegExp对象的compile(), exec(), test() 和支持正则表达式的的String()方法为search(), match(), replace(), split(). RegExp对象方法 compile()方法 该方法用于改变和重新编译正则表达式.语法: RegExpObject.comp

如何用java实现十道加法求和,算出答对几道,答错几道!

public static void main(String[] args) {  Scanner input=new Scanner(System.in);      //需要导入import java.util.Random;包  Random a1=new Random(); //第一伪随机数对象  Random a2=new Random(); //第二个伪随机数对象  int bool=0;//定义计算机  --第几道题  int true1=0;//定义答对了几道  int fals