【问题标题】:how do i do asyncronous calls without let?我如何在没有 let 的情况下进行异步调用?
【发布时间】:2016-08-11 18:03:32
【问题描述】:

我昨天发现iphone不允许使用let。这让我很困惑如何处理像 ajax 和超时这样的异步调用。波纹管是显示差异的示例代码。如何在不使用某些设备不喜欢的关键字的情况下使 var half 功能与 let half 相同?

$("body").append("VAR:<br>");  
for (var i=0;i<10;i++) {
    setTimeout(function(){
    $("body").append(i +"<br>");  
  },Math.random()*1000);
}

//make lets come after var
setTimeout(function(){

$("body").append("LET:<br>");  
for (let i=0;i<10;i++) {
    setTimeout(function(){
    $("body").append(i +"<br>");  
  },Math.random()*1000);
}
},2000);

JSFiddle

【问题讨论】:

  • 用 var 替换 let !!如果那只是你的问题!
  • @Nalin 运行我的 jsfiddle,你会看到 let 和 var 做不同的事情。 Var 仅输出最后一个值。所有值都在哪里

标签: javascript let


【解决方案1】:

如果没有IIFE,您的代码将只有一个i 实例,并且始终显示10。要创建局部变量,您需要一个函数。每个函数都有自己的局部变量。在代码中,我调用 IIFE 并将 i 作为参数传递。每个函数都有自己的当前i 的副本。

简而言之,如果你想要一个用 var 关键字声明的局部变量,你需要一个 function。在我们的例子中是立即调用的函数

$("body").append("VAR:<br>");  
for (var i=0;i<10;i++) {
    (function(e){
      setTimeout(function(){
         $("body").append(e +"<br>");  
      },Math.random()*1000);
    })(i);    
}

查看代码

var body = $("body")

body.append("VAR:<br>");  
for (var i=0;i<10;i++) {
    (function(e){
      setTimeout(function(){
         body.append(e +"<br>");  
      },Math.random()*1000);
    })(i);    
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
  
</body>

这是你的JSFIDDLE

【讨论】:

  • 感谢您的快速回复。
猜你喜欢
  • 2021-07-14
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2017-03-05
  • 2013-02-20
  • 1970-01-01
相关资源
最近更新 更多