我如何在没有 lte 的情况下进行异步调用?

how do i do asyncronous calls without let?

我昨天发现 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

如果没有 IIFE,您的代码将只有一个 i 实例,并且将始终显示 10。要创建局部变量,您需要 function.Every 函数有自己的局部变量。在代码中,我调用了一个 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