循环中的 setTimeout 不打印变量的值?

settimeout inside a loop doesnot print the value of variable?

提问人:Gagan baghel 提问时间:11/20/2022 更新时间:11/20/2022 访问量:96

问:

function x(){
    for(var i=1;i<=5;i++){
        setTimeout(function (i){
            console.log(i)
        },i*1000)
    }
}
x();

这是我的代码,任何人都可以帮我解释为什么我的代码打印 “”“”undefined“”“ 代替我

我一直在寻找如何在循环中使用 setTimeout 函数,但关于这东西的文档似乎有限,我想在 for 循环中制作一个 setTimeout。如果你能帮我解决这个问题,那就太好了

JavaScript 函数 作用 域闭包 settimeout

评论

2赞 VLAZ 11/20/2022
阴影中的参数 外部变量 。但是,请参阅 JavaScript 闭包循环 – 简单的实际示例,以了解有关您尝试执行的实际操作的更多信息。function (i)i
0赞 CherryDT 11/20/2022
首先,删除未使用的参数,因为它会遮挡外部,但它从未设置过,所以它是 .然后,替换为 它将起作用。原因如下。iiundefinedvarlet

答:

1赞 flyingfox 11/20/2022 #1

您可以按照 how-can-i-pass-a-parameter-to-a-settimeout-callback 将 paramerter 传递给setTimeout()

还需要使用而不是缩小范围let i=1;i<=5;i++var i=1;i<=5;i++i

function x(){
    for(let i=1;i<=5;i++){
        setTimeout(function (){
            console.log(i)
        },i*1000)
    }
}
x();