Skip to content

Day17:下面代码输出什么? #53

@Genzhen

Description

@Genzhen
Collaborator
for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1);
}

每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案
欢迎大家在下方发表自己的优质见解
二维码加载失败可点击 小程序二维码

扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。

Activity

Genzhen

Genzhen commented on Jun 22, 2020

@Genzhen
CollaboratorAuthor

答案
0 1 2

解析
使用let关键字声明变量i:使用let(和const)关键字声明的变量是具有块作用域的(块是{}之间的任何东西)。 在每次迭代期间,i将被创建为一个新值,并且每个值都会存在于循环内的块级作用域。

// 下面代码输出什么
for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1);
}

答案:3 3 3,由于JavaScript中的事件执行机制,setTimeout函数真正被执行时,循环已经走完。 由于第一个循环中的变量i是使用var关键字声明的,因此该值是全局的。 在循环期间,我们每次使用一元运算符++都会将i的值增加1。 因此在第一个例子中,当调用setTimeout函数时,i已经被赋值为3。

sweetliquid

sweetliquid commented on Nov 4, 2020

@sweetliquid

意义不大

Genzhen

Genzhen commented on Nov 5, 2020

@Genzhen
CollaboratorAuthor

意义不大
@lgwebdream 感谢发表自己的见解

理论的储备还是需要的,不一定每个人都知道这点知识,像在没有 let 之前 这个for 循环还是经常出现在面试题中的

shiaofang

shiaofang commented on Dec 30, 2020

@shiaofang

学到了~谢谢

webyangpei

webyangpei commented on Mar 3, 2021

@webyangpei

答案
0 1 2

解析
使用let关键字声明变量i:使用let(和const)关键字声明的变量是具有块作用域的(块是{}之间的任何东西)。 在每次迭代期间,i将被创建为一个新值,并且每个值都会存在于循环内的块级作用域。

// 下面代码输出什么
for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1);
}

答案:3 3 3,由于JavaScript中的事件执行机制,setTimeout函数真正被执行时,循环已经走完。 由于第一个循环中的变量i是使用var关键字声明的,因此该值是全局的。 在循环期间,我们每次使用一元运算符++都会将i的值增加1。 因此在第一个例子中,当调用setTimeout函数时,i已经被赋值为3。

for(var i = 0; i < 3; i++) { setTimeout(console.log(i)) } 这个结果是 0 1 2

EaVanCN

EaVanCN commented on May 24, 2021

@EaVanCN

也可以用IIFE创建一个新的作用域
for (var i = 0; i < 3; i++) {
(function(){
var j = i;
setTimeout(() => console.log(j), 1);
})()
}
//0 , 1 , 2

SnailOwO

SnailOwO commented on Nov 17, 2021

@SnailOwO

感觉这题应该改成,有几种方式让i 在这题的基础上输出0,1,2。这样会更好

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @EaVanCN@Genzhen@sweetliquid@SnailOwO@webyangpei

        Issue actions

          Day17:下面代码输出什么? · Issue #53 · lgwebdream/FE-Interview