zoukankan      html  css  js  c++  java
  • 几道好玩的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”

  • 相关阅读:
    Mac版sublime text右键open in browser 不能识别中文名解决办法
    python 内置函数
    python 迭代器 生成器 列表推导式和生成器表达式
    python 闭包
    python 练习题
    python 打印扑克牌练习题
    python 函数 可变数据类型默认值
    python min() ,max()
    python 九九乘法表
    函数的进阶
  • 原文地址:https://www.cnblogs.com/lvqiupingboke-2019/p/12090742.html
Copyright © 2011-2022 走看看