Javascript for循环的作用域问题

Javascript for循环的作用域问题,javascript,scope,Javascript,Scope,这对我来说不是什么问题。我只是想知道我如何才能正确地完成它,而不是采取变通办法。如果我们使用for()和一些延迟事件,则只考虑最后一个值 测试: //仅使用i(不起作用) 对于(var i=0;i而言,您的解决方案并不是真正的“解决方案”,它是接近最佳方式的: for(var i=0; i<10; i++) { setTimeout(function() { test1.textContent = i; }, i * 1000); } for(var i=

这对我来说不是什么问题。我只是想知道我如何才能正确地完成它,而不是采取变通办法。如果我们使用
for()
和一些延迟事件,则只考虑最后一个值

测试

//仅使用i(不起作用)

对于(var i=0;i而言,您的解决方案并不是真正的“解决方案”,它是接近最佳方式的:

for(var i=0; i<10; i++) {
    setTimeout(function() {
        test1.textContent = i;
    }, i * 1000);
}

for(var i=0;iJavaScript仅在
函数
级别建立作用域。因此,您的
函数
方法是正确的,尽管有相同想法的变体。您想要
let
,但基本上不受支持。可能重复[settimeout-in-a-for-loop-and-pass-i-as-value][1]:我想我的速度快了10倍。但是谢谢。
for(var i=0; i<10; i++) {
    setTimeout(function() {
        test1.textContent = i;
    }, i * 1000);
}
for(var i=0; i<10; i++) {
    var x = i;

    setTimeout(function() {
        test2.textContent = x;
    }, i * 1000);
}
for(var i=0; i<10; i++) {
    ( function( i ) {
        setTimeout(function() {
            test1.textContent = i;
        }, i * 1000);
    } ( i ) };
}