美文网首页
for 循环执行机制

for 循环执行机制

作者: 练习时长2年半的个人练习生 | 来源:发表于2019-03-04 16:02 被阅读0次
  • Js阻塞机制
    跟Js引擎的单线程处理方式有关,每个window一个JS线程。所谓单线程,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码。

由于浏览器是事件驱动的(Event driven),因此浏览器中很多行为是异步(Asynchronized)的,很容易有事件被同时或者连续触发。当异步事件发生时,会创建事件并放入执 行队列中,等待当前代码执行完成之后再执行这些代码,如鼠标点击事件发生、定时器触发事件发生、XMLHttpRequest完成回调这些事件,都会被放 入执行队列中等待。

下面看这个例子

for(var i=0;i<3;i++){
    setTimeout(function(){
        console.log(i);
    }, (i+1)*1000); 
}
//执行结果为3 3 3 

而实际上,这段代码log出来的结果是 3,3,3。这是js新手很容易遇到的问题,具体原因就是因为for循环的阻塞机制。在上面的代码中,setTimeout这个定时器需要等待for循环 执行完成,而for循环执行完成了之后,i已经为3了,此时才开始执行setTimeout,因此console.log(i)会是3。

至于为什么i会是3,请回顾一下for循环的执行顺序,当i为2的时候,满足循环条件,执行代码块,然后i++,此时i为3,不满足循环条件,不执行代码块,循环停止。

对于for循环,记住,是在不满足条件的情况下停止循环,对于以上代码,可以看出,i=3的时候才不满足。

for循环的表达式一般如下:
for(表达式1;表达式2;表达式3){
    表达式4;
}

执行的顺序为:
1)第一次循环,即初始化循环。
首先执行表达式1(一般为初始化语句),再执行表达式2(一般为条件判断语句),判断表达式1是否符合表达式2的条件,如果符合,则执行表达式4,否则,停止执行,最后执行表达式3.
2)下次的循环:
首先执行表达式2,判断表达式3是否符合表达式2的条件;如果符合,继续执行表达式4,否则停止执行,最后执行表达式3.如果往复,直到表达式3不再满足表达式2的条件。

总结:总的来说,执行顺序是一致的,先进行条件判断(表达式2),再执行函数体(表达式4),最后执行表达式3。如此往复,区别在于,条件判断的对象,在第一次判断时,是执行表达式1,初始化对象,后续的判断对象是执行后的结果(表达式3)

相关文章

  • for,while,until

    循环 循环执行 循环执行语句:for,while,until for for 执行机制:依次将列表中的元素赋值给“...

  • for 循环执行机制

    Js阻塞机制跟Js引擎的单线程处理方式有关,每个window一个JS线程。所谓单线程,在某个特定的时刻只有特定的代...

  • 《浏览器工作原理与实践》学习笔记(四)

    消息队列和事件循环 要想在线程运行过程中,能接收并执行新的任务,就需要采用事件循环机制。 事件循环机制:相比于线性...

  • Event Loop例子

    事件循环:macrotask与microtask JS的执行机制如图: 分析一道执行顺序的例子 第一次事件循环流程...

  • 前端进阶|第四天从setTimeout、Promise看js 的

    要理解这几个函数的执行顺序,需要先明确js的执行机制。Javascript是单线程语言,事件的调度机制是事件循环(...

  • 异步

    一、循环 Event Loop 机制 1、事件循环的流程 在main中直接执行,优先于Microtask和Even...

  • 任务队列,事件循环 宏任务 微任务

    javascript执行机制是基于事件循环的并发式的,事件循环负责处理代码,收集和处理事件以及执行队列中的子任务 ...

  • JS 运行机制

    为什么 setTimeout 写在 Promise 前面却会比 Promise 后执行? JS 事件循环机制 简单...

  • 条件判断if和循环语句

    过程式编程语言:顺序执行,选择执行,循环执行 1.if语句:条件选择 (1) 执行机制:逐条件进行判断,第一次遇为...

  • js定时器

    从JS执行机制说起 浏览器(或者说JS引擎)执行JS的机制是基于事件循环。 由于JS是单线程,所以同一时间只能执行...

网友评论

      本文标题:for 循环执行机制

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