java脚本Foreach循环

时间:2017-03-20 09:13:10

标签: javascript loops foreach

的Javascript

f64

HTML

function sortAsc($a, $b) {
   return ($a[TOTCOM_METIER] < $b[TOTCOM_METIER]);
}

function sortDesc($a, $b) {
   return ($a[TOTCOM_METIER] > $b[TOTCOM_METIER]);
}

function sortMyArray($array, $order = "asc") {
    if($order === "desc") {
        return usort($array, "sortDesc");
    }

    return usort($array, "sortAsc");
}

// Call it like
sortMyArray($array, "asc");

如何增加&#34;我&#34;每隔5毫秒,每次更改时都会在#demo中打印

我想看看每5ms增加一次( i )的值,然后在演示中打印出来。

现在,由于某种原因,一旦我运行脚本,值 5000 立即打印出来,而不是每次增加500。

提前致谢。

6 个答案:

答案 0 :(得分:2)

您可以将myFunction更改为:

var i = 0;

function myFunction() {
    var timerId = setInterval(function(){ 
        if(i >= 5000)
        {
            clearInterval(timerId);
        }

        document.getElementById("demo").innerHTML = i;
        i +=500;
    }, 5);
}

答案 1 :(得分:0)

这应该有效。

var i=0;

function looper(){
    setTimeout(function(){ 
console.log(i+" data");
i=i+500;
if(i<5000)
looper();
}, i);
}

looper();

答案 2 :(得分:0)

function myFunction() {
   var i = 0;
   var max = 5000;
   var step = 500;
   var intervalMs = 5;

   var interval = setInterval(function() {
     // clear interval if one step before max value
     if (i >= max-step) {
       clearInterval(interval);  
     }

     // increment i by step
     i+=step;

     // set inner html of div
     document.getElementById("demo").innerHTML = i;
   }, intervalMs)
}

Plunkr:https://plnkr.co/edit/IfkGOpjUnf4sKpN4iCZ4?p=preview

答案 3 :(得分:0)

您遇到的问题是没有保存对超时的引用。第二个之后的后续参数作为参数传递给回调函数。

这里我们传递i作为第三个参数

setTimeout(fn, delay, i)

然后在callaback中我们可以访问i,我们会在回调范围内将其重新分配给x

&#13;
&#13;
function myFunction() {
  for (i = 0; i <= 5000; i = i + 500) {
    setTimeout(function(x) {
      document.getElementById("demo").innerHTML = x;
    }, i, i);
  }
}
myFunction()
&#13;
<div id="demo"></div>
&#13;
&#13;
&#13;

&#13;
&#13;
function myFunction(max, ii = 0) {
  document.getElementById('demo').innerHTML = ii
  if (ii < max) {
    setTimeout(myFunction, 500, max, ii + 500)
  }
}
myFunction(5000)
&#13;
<div id="demo"></div>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

如果您希望代码看起来与您的代码类似,可以使用IIFE:

function myFunction() {
  for (i = 0; i <= 5000;i += 500) {
    (function(index) {
        setTimeout(function() {
          document.getElementById("demo").innerHTML = index;
        }, index);
    })(i);
  }
}
<body onload="myFunction()">
    <div id="demo"></div>
</body>

答案 5 :(得分:0)

**

<div id="demo"></div>
<script>
function myFunction() {
        var i = 0;
        var setClock = function() {
            if (i < 5000) {
                local = i;
                i += 500;

            setTimeout(function() {document.getElementById("demo").innerHTML = local; setTimeout(setClock, 500);},
                500);
            }
        }
        setClock();
    }

**

  1. 你应该在标签中包装脚本
  2. javascript闭包。您应该知道,由于Closures,所有setTimeout()的第二个参数都是5000,这是i的最终值。您可以通过我显示的代码避免关闭或通过以下代码消除Closure的影响:
  3. <div id="demo"></div>
    <script>
    function myFunction() {
            var local;
            for (i = 0; i < 5000; i+= 500) {
                local = i;
                setTimeout((function(interval){
                    return function() {document.getElementById("demo").innerHTML = interval;} ;
                })(local), (function(interval){return interval})(local));
            }
    }