Javascript 为什么函数输出总是5?

Javascript 为什么函数输出总是5?,javascript,for-loop,settimeout,Javascript,For Loop,Settimeout,有人知道为什么这个代码的输出是5乘以5吗 for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, i * 1000 ); } for(变量i=0;i

有人知道为什么这个代码的输出是5乘以5吗

for (var i = 0; i < 5; i++) {
    setTimeout(function() { console.log(i); }, i * 1000 );   
}
for(变量i=0;i<5;i++){
setTimeout(函数(){console.log(i);},i*1000);
}

for语句永远不会到达5:S

您需要进行闭包以保留
i
变量的值。否则,
i
变量将是执行
setTimeout
时最后一次迭代的值

for (var i = 0; i < 5; i++) {
    (function(i){
        setTimeout(function() { console.log(i); }, i * 1000 );
    })(i);   
}
for(变量i=0;i<5;i++){
(职能(一){
setTimeout(函数(){console.log(i);},i*1000);
})(i) );
}

查看有关

的阅读,您需要进行闭包,以保留
i
变量的值。否则,
i
变量将是执行
setTimeout
时最后一次迭代的值

for (var i = 0; i < 5; i++) {
    (function(i){
        setTimeout(function() { console.log(i); }, i * 1000 );
    })(i);   
}
for(变量i=0;i<5;i++){
(职能(一){
setTimeout(函数(){console.log(i);},i*1000);
})(i) );
}

请阅读有关

闭包的经典示例:

闭包是引用独立(自由)变量的函数。在里面 换句话说,闭包中定义的函数“记住”了 创建它的环境

您的内部函数可以访问环境(在本例中使用外部变量i)。循环结束后,i的值为5,函数使用该值。当然,如果在循环结束后使用console.log(i)


试试这篇文章-

闭包的经典例子:

闭包是引用独立(自由)变量的函数。在里面 换句话说,闭包中定义的函数“记住”了 创建它的环境

您的内部函数可以访问环境(在本例中使用外部变量i)。循环结束后,i的值为5,函数使用该值。当然,如果在循环结束后使用console.log(i)


试试这篇文章-

只需修改一点代码,就可以了:

for (var i = 0; i < 5; i++) {
    setTimeout(function(x) { console.log(x); }, i * 1000, i);   
}
for(变量i=0;i<5;i++){
setTimeout(函数(x){console.log(x);},i*1000,i);
}

只需修改一点代码,它就可以工作了:

for (var i = 0; i < 5; i++) {
    setTimeout(function(x) { console.log(x); }, i * 1000, i);   
}
for(变量i=0;i<5;i++){
setTimeout(函数(x){console.log(x);},i*1000,i);
}

不需要为此创建闭包。您可以接受setTimeout函数上的参数,并在延迟后将其作为参数传递,而无需为此创建闭包。您可以接受setTimeout函数上的一个参数,并在delayheh,nice,我不知道这一点之后将其作为参数传递。谢谢分享:)嘿,很好,我不知道。谢谢分享:)