JS 函数的执行时机

1. 常见的面试题代码解释

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

// 6 个 6
JS是单线程运行的,setTimeout(code,millisec) setTimeout 是一个异步任务,要在当前code执行完之后millisec才执行自己。i为全局变量,值在for循环后最终会是 6

2. 代码打印 0、1、2、3、4、5 的方法

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

因为 let 变量的作用域只在当前函数中,所以每次 for 循环都会生成一个新的 i,六次 for 循环结束之后,就会有 6 个 i,因此 setTimeout 会分别打印出这 6 个 i

for(let i=0; i<6; i++){
  console.log(i)
}

将 setTimeout 包裹在立即执行函数中,每次将 i 的值赋值给 j,并打印出 j 的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,428评论 0 2
  • 一、为什么如下代码会打印出六个6 setTimeout是指过一会儿再执行,也就是循环执行完再打印,当循环6次后,i...
    浪味仙儿啊阅读 164评论 0 2
  • 1.为什么下面代码会打印 6 个 6 setTimeout是有延迟的执行,虽然设置了0,但是对于计算机的运行速度来...
    wwfstrong阅读 122评论 0 0
  • JS函数的调用时机 以下代码为什么会打印出6个6 因为setTimeout的意思是稍后执行,也就是在等for循环结...
    csy没有昵称阅读 189评论 2 1
  • 为什么打印出6 个 6? setTimeout 会过一段时间才去执行,这时候for已经循环完了所以打出6个6 为什...
    小芬芬007阅读 163评论 0 0