美文网首页
javaScript_运行机制

javaScript_运行机制

作者: 2018_ieye | 来源:发表于2018-11-12 11:57 被阅读0次

借鉴一道题:
代码如下:

for(var i=0;i<5;i++){
    setTimeout(function(){
          console.info(new Date(),i);
    },1000);
};
console.info(new Date(),i);

输出结果是什么?

结果截图.png

可以看出先打印出了一个5,这是第六行代码的输出,然后间隔1s过后,同时打印出了5个5;即:5->5,5,5,5,5;
修改一
想要打印出5->1,2,3,4,5;的效果,如何修改代码呢?

之所以会连续打印出5个5,是因为循环体里的输出语句是在1s过后才会加入执行队列,这时“i”的值已经变成了5;为了打印出1,2,3,4,5;可以在每一次循环的时候立即执行一个函数,把当前的“i”当做参数传入进来,那么每次拿到的“i”就一样了;

function outer(n){
    setTimeout(function(){
          console.info(new Date(),n);
    },1000);
  };
for(var i=0;i<5;i++){
  outer(i);
};
console.info(new Date(),i);
结果截图.png

修改二
先执行循环体内的输出,再执行最外层的输出;即先隔秒输出0,1,2,3,4;然后再输出5;如何修改代码呢?

换种思路就是先执行异步操作,再执行同步代码;与js原本的执行顺序正好是相反的。当有明确的先后执行顺序时,可以利用promise来控制。

var tasks=[];
function task(n){
    return new Promise(function(resolve,reject){
        setTimeout(function(){console.info(new Date(),n);resolve();},n*1000)
    });
};
for(var i=0;i<5;i++){
    tasks.push(task(i));
};
Promise.all(tasks).then(function(){
    setTimeout(function(){console.info(new Date(),i)},1000);
});
结果截图.png

上面的面试题,只是提供了解决方法,而没有讲述javascript的运行原理,下面就是本文的重点:

相关文章

  • javaScript_运行机制

    借鉴一道题:代码如下: 输出结果是什么? 结果截图.png 可以看出先打印出了一个5,这是第六行代码的输出,然后间...

  • JavaScript_对象

    javaScript中的对象有内置对象,宿主对象,自定义对象;内置对象:数组,函数,日期,正则表达式;宿主对象:j...

  • javascript_函数

    函数对任何语言来说都是一个核心的概念,通过函数可以封装任意多条语句,而且可以在任何地方,任何时候调用执行,...

  • javascript_入门

    document.write("xxx"); // 在html页面中 输出点东西aler...

  • javascript_进阶

    引入外部js 文件的方法 testJs.js 文件中 变量 操作符 数组 各种循环 break :退出当前循环,c...

  • JavaScript_事件

    事件 通过触发指定的行为的时候,执行代码 一、事件三要素 事件源:触发条件的元素本身 事件类型:触发条件的类型( ...

  • JavaScript_循环

    本章主要讲述循环相关语法和内容( while、do while、for )以及break和continue的使用…...

  • JavaScript_对象

    一、时间对象(Date) (一)Date对象的创建 (二)Date对象的方法 (三)设置与获取的常用方法 二、对象...

  • JavaScript_函数

    一、函数介绍 函数的作用是将特定的功能封装起来,需要使用时再进行调用,从而可以重复使用而减少冗余。 (一)函数分类...

  • JavaScript_数组

    一、 数据结构 数据结构分为: 逻辑结构、存储结构和算法。 (一)存储结构 a. 线性 栈 队列 堆 数组 …… ...

网友评论

      本文标题:javaScript_运行机制

      本文链接:https://www.haomeiwen.com/subject/vginyftx.html