首页 > 试题广场 >

以下代码执行后,console 输出的信息是?for(let

[单选题]
以下代码执行后,console 输出的信息是?
for(let i = 0; i < 5; i++){
    requestAnimationFrame(() => console.log(i));
}


  • 1 2 3 4 5
  • 0 1 2 3 4
  • 4 4 4 4 4
  • 5 5 5 5 5
requestAnimationFrame虽然是异步函数,但是由于i是用let定义的,每一次都会生成一个块级作用域,来把当前值和requestAnimationFrame放在这个作用域中 (仅个人理解,如有错误,请不吝赐教~)
发表于 2020-08-31 11:47:53 回复(2)
requestAnimationFrame是什么鬼?

发表于 2019-08-26 19:27:50 回复(17)
很简单,因为let在循环条件的时候定义,而不是在外部定义,则每一次循环let都会生成一个块级作用域保存当前的值
发表于 2020-06-06 10:41:15 回复(1)
window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行
发表于 2020-03-10 20:06:33 回复(0)

i 是 let 声明的,当前的i只在本轮循环有效,可以理解为每一次循环的i其实都是一个新的变量。


发表于 2019-08-26 21:40:26 回复(5)
let
发表于 2019-08-20 23:49:40 回复(1)
requestAnimationFrame是异步函数 for循环是同步任务 同步任务遇到异步任务会自动挂起继续执行同步任务 i在for循环内定义,let是块级作用域作用域,每次都会生成一个块级作用域,不存在变量提升,不可重复定义,声明的变量不会作为windows属性。
发表于 2021-09-13 09:52:36 回复(0)
requestAnimationFrame是异步函数 for循环是同步任务 同步任务遇到异步任务会自动挂起继续执行同步任务 i在for循环内定义,let是块级作用域作用域,每次都会生成一个块级作用域,不存在变量提升,不可重复定义,声明的变量不会作为windows属性。 10个月前 0 4 牛客973162693号 南京信息工程大学
发表于 2022-07-18 23:18:32 回复(0)
每次循环let都会生成一个块级作用域,所以i之间互不影响
发表于 2021-09-26 23:21:43 回复(0)
审题审题
发表于 2021-08-27 08:48:13 回复(0)
为什么控制台上输出的时5,0,1,2,3,4呢
for(let i = 0; i < 5; i++){
requestAnimationFrame(() => console.log(i));
}
5
VM2497:2 0
VM2497:2 1
VM2497:2 2
VM2497:2 3
VM2497:2 4

发表于 2021-07-19 11:08:36 回复(0)
requestAnimationFrame是异步函数,但是由于i 是用let  定义的,每一次循环都会生成一个块级作用域,来把当前值和requestAnimationFrame放在这个作用域中。
发表于 2021-07-11 14:18:02 回复(0)
没注意 用的是let 声明的i,如果是var的话就应该选D,这里涉及到了循环异步执行引用变量的坑
发表于 2021-06-30 15:19:50 回复(0)
let 块级作用域
发表于 2021-04-10 11:06:00 回复(0)
这不是箭头函数么?

发表于 2020-12-26 18:39:36 回复(0)
没细看,没看到let,let是块级作用域,每次循环的i都不是一样。
发表于 2020-10-19 14:13:24 回复(0)
注意看到i是用let定义的
发表于 2020-10-08 17:14:16 回复(0)
<p>请问这里可以不用尖头函数的话也会出现这个结果吗</p><p><br></p>
发表于 2020-10-02 22:46:09 回复(0)

***选12345也是服气


发表于 2020-03-31 12:54:23 回复(0)
requestAnimationFrame在这里存在的意义是什么?
发表于 2020-01-30 15:21:41 回复(1)