JS 函数的执行时机

什么是异步函数和同步函数

  • 同步函数:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所要做的事情全都做完了才返回。

  • 异步函数:如果一个异步函数被调用时,该函数会立即返回尽管该函数规定的操作任务还没有完成。

    经典代码

以下就是关于异步的代码:

let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}//6个6

到这里就很奇怪了,为什么是6个6而不是0—5呢?

因为 i 是全局的。for 循环执行完毕之后 i 的值为6。有人奇怪 i 不应该是5吗。i = 5 满足条件(<6)是最后一轮循环,然后i++,i 为6。这个循环自始至终都是在改变一个 i 的值。所以会打印6个6。

要是想打出0—5呢?

可以这样:

for(let i = 0; i<6; i++){
setTimeout(()=>{
    console.log(i)
},0)
}
// 0 1 2 3 4 5

这里 let 会单独创建一个作用域 相当于有6个 i 。

除了使用let还能这样:

for (var i = 0; i < 6; i++) {
setTimeout((function(i){
  return function() {
      console.log(i);
  }
}(i)),0)
}
// 0 1 2 3 4 5
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 解释为什么如下代码会打印 6 个 6 变量i在for循环中执行i++. 最后一次i++ ,i=6,for循环不...
    lin_lilili阅读 205评论 0 0
  • 为什么上面的代码会打印 6 个 6,这是因为setTimeout()是异步执行,即使delay值取的为0,也只是意...
    我愚蠢的理想主义啊阅读 151评论 0 0
  • 一、关于“打印6个6”的解释分析 ·首先声明变量i,并赋值为0·进行for循环,循环次数为6次·循环过程中,i的值...
    scotton阅读 71评论 0 0
  • 1. 常见的面试题代码解释 // 6 个 6JS是单线程运行的,setTimeout(code,millisec)...
    张德瘦嬢嬢阅读 234评论 0 0
  • 先看代码,猜测一下会打印出什么 打印结果,如图 对的,会打印出6个6,为什么会这样呢,不应该是打印出0-5嘛 解释...
    luci_dity阅读 154评论 0 0