将变量传递给foreach函数

时间:2016-08-25 11:35:39

标签: javascript variables foreach scope ecmascript-6

您好我希望将antwoord传递给

  

opleidingArray.forEach(haalScoresOp,antwoord);

所以我可以在

中使用它
  

HaalScoresOp

功能。我不能让这个工作。我也试过绑定,但这不起作用。

我得到的antwoord没有被定义为错误。

var antwoordenPerVraag = [2,1,3];

console.log(VragenEnScores.vragen[0].opleidingen[0]);


antwoordenPerVraag.forEach(berekenEindresultaten);

function berekenEindresultaten(item, index) {
  var opleidingArray = VragenEnScores.vragen[index].opleidingen;

  var antwoord = "bla";

  opleidingArray.forEach(haalScoresOp, antwoord);
  // score nog doorgeven aan haalscores op = het item
}

function haalScoresOp(item, index) {
  console.log("haal score op voor");
  console.log(item.naam);
  console.log(item.scores);

  console.log("haal antwoord op");
  console.log(antwoord);
}

4 个答案:

答案 0 :(得分:7)

您在antwoord内引用haalScoresOp的方式无效/无意义/不好。你引用它就好像它是一个范围变量......好吧,它不是。该函数应该像其它参数一样接受它作为参数:

function haalScoresOp(antwoord, item, index) {
  ..
  console.log(antwoord);
}

然后你可以将它传递给来电者:

opleidingArray.forEach(function (item, index) {
    haalScoresOp(antwoord, item, index)
});

或:

opleidingArray.forEach(haalScoresOp.bind(null, antwoord));

答案 1 :(得分:1)

您可以简单地使用:

opleidingArray.forEach(haalScoresOp, antwoord);

并参考haalScoresOp函数中的antwoord,如下所示:

function haalScoresOp(){
    var diantwoord = this.valueOf();
}

antwoord作为“ this”对象传递给有关类型的函数

答案 2 :(得分:0)

您可以将haalScoresOp函数更改为berekenEindresultaten函数内的匿名函数:

var antwoordenPerVraag = [2,1,3];

console.log(VragenEnScores.vragen[0].opleidingen[0]);

antwoordenPerVraag.forEach(berekenEindresultaten);

function berekenEindresultaten(item, index) {
  var opleidingArray = VragenEnScores.vragen[index].opleidingen;

  var antwoord = "bla";

  opleidingArray.forEach(function(item, index){
    // score nog doorgeven aan haalscores op = het item
    console.log("haal score op voor");
    console.log(item.naam);
    console.log(item.scores);

    console.log("haal antwoord op");
    console.log(antwoord);
  });

}

这会将antwoord变量的范围保留在berekenEindresultaten函数

答案 3 :(得分:0)

您可以使用 forEach 的第二个 thisArg 参数来传递具有任意数量参数的对象:

const antwoordenPerVraag = [2,1,3];

// Dummy `VragenEnScores` variable to test the code: 
const VragenEnScores = {
  vragen: [
    { opleidingen: [{ naam: "A", scores: 1 }] },
    { opleidingen: [{ naam: "B", scores: 2 }] },
    { opleidingen: [{ naam: "C", scores: 3 }] }
  ]
}

antwoordenPerVraag.forEach(berekenEindresultaten);

function berekenEindresultaten(item, index) {

  const opleidingArray = VragenEnScores.vragen[index].opleidingen;
  const antwoord = "bla";
  // We are going to pass an object as the 2nd argument to forEach
  // which contains custom properties and values 
  opleidingArray.forEach(haalScoresOp, { antwoord: antwoord, extra: "Yey!" });

}

function haalScoresOp(item, index) {
  console.log("haal score op voor");
  console.log(item.naam);
  console.log(item.scores);
  console.log("haal antwoord op");
  console.log("antwoord: ", this.antwoord); //=> "bla"
  console.log("extra: ", this.extra);       //=> "Yey!"
}

一个更简单的例子,可以更容易地理解这个概念:

const list = [ 11, 22, 33 ];

list.forEach( 

  // 1st Argument to forEach: callback
  function( value ){

    console.log( value );
    console.log( this.extraParameter );
  
  },
  
  // 2nd Argument to forEach: thisArg
  { extraParameter: "extra" }

)