为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript变量绑定和循环

JavaScript变量绑定和循环

繁星点点滴滴 2019-08-28 14:38:55
JavaScript变量绑定和循环考虑这样的循环:for(var it = 0; it < 2; it++){     setTimeout(function() {         alert(it);     }, 1);}输出是:=> 2=> 2我希望它是:0,1。我看到两种方法来解决它:解决方案#1。这个基于我们可以将数据传递给setTimeout的事实。for(var it = 0; it < 2; it++){     setTimeout(function(data) {         alert(data);     }, 1, it);}解决方案#2。function foo(data){     setTimeout(function() {         alert(data);     }, 1);}for(var it = 0; it < 2; it++){     foo(it);}还有其他选择吗?
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

使用let关键字,您可以完全解决这个问题:

for(let it = 0; it < 2; it++){
    setTimeout(function() {
        alert(it);
    }, 1);}


查看完整回答
反对 回复 2019-08-28
?
Qyouu

TA贡献1786条经验 获得超11个赞

与其他解决方案类似,但在我看来更干净:

for (var it = 0; it < 2; it++) {
  // Capture the value of "it" for closure use
  (function(it) {
     setTimeout(function() {
       alert(it);
     }, 1);
  // End variable captured code
  })(it)}

这为捕获保留了相同的变量名称,并为整个循环执行此操作,将其与超时设置的逻辑分开。如果你想在块中添加更多逻辑,你可以轻而易举地做到这一点。

我唯一不喜欢解决方案的是最后重复“它”。


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 399 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信