foreach循环中的函数?

时间:2017-01-27 12:07:14

标签: javascript arrays object foreach

我在codepen" http://codepen.io/jalabkhan/pen/bgNavG"中看到了这个。我对foreach循环如何工作感到困惑。还有什么是spark,i和array的价值。我是编程新手,所以请尽量让答案变得简单。谢谢大家!!

  function draw() {
    ctx.fillStyle = 'rgba(0,0,0, 0.1)';
    ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);

    sparks.forEach(function (spark, i, array) {

      if (spark.opacity <= 0) {
        array.splice(i, 1);
      } else {
        drawSpark(spark);
      }
    });

    window.requestAnimationFrame(draw);
  }

2 个答案:

答案 0 :(得分:2)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

数组的forEach方法允许您通过回调函数循环其值。换句话说,数组中的每个值依次传递给回调函数,以便进行处理。

forEach自动将三个参数转发给回调:

  • 当前正在处理的数组项的值
  • 当前正在处理的数组项的数字索引
  • 整个数组正在迭代

答案 1 :(得分:1)

forEach iterates就像for循环一样抛出你的数组,但是因为你已经在回调函数中有了值,所以它更加可更新

在你的例子中

function draw() {
    ctx.fillStyle = 'rgba(0,0,0, 0.1)';
    ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);

    sparks.forEach(function (spark, i, array) { 

/*spark is    your current value in the array (like sparks[i] in a for loop), i is 
you current index and array is sparks*/

      if (spark.opacity <= 0) {
        array.splice(i, 1);
      } else {
        drawSpark(spark);
      }
    });

    window.requestAnimationFrame(draw);
  }