我有两个问题:
1.为什么我不能将rows传递给checkEdge的同时将rowIndex传递给checkEdge
2.如何在不将所有参数/变量作为createBoard传递的情况下,将checkEdge的所有参数/变量授予访问权限

尝试了checkEdge(cell, cellIndex, rowIndex, width, height)checkEdge.apply(arguments),但是没有用。

const checkEdge = function(cell, cellIndex, rows, rowIndex, width, height) {
  console.log(rows) // <--- logs undefined.
  console.log(rowIndex) // <--- works as expected.
  if(rowIndex === 0 || rowIndex === height-1) {
    return {value: 0, birth: false}
  }
  else if(cellIndex === 0 || cellIndex === width-1) {
    return { value: 0, birth: false }
  }
  else {
    return { value: Math.round(Math.random()), birth: false }
  }
}

const createBoard = ({width,height}) =>
Array.from({length: height},
  (rows, rowIndex) => Array.from({length: width}, (cell, cellIndex) =>

    checkEdge(cell, cellIndex, rows, rowIndex, width, height)
  )
)

最佳答案

为什么我可以将rows传递给checkEdge时将rowIndex传递给checkEdge


可以,而且可以。问题是rowsundefined,就像内部cell中的Array.from一样。请注意,您是从零开始创建数组的(只是一个具有长度但没有元素的对象),还没有任何值。


  我如何才能将createBoard的所有参数/变量授予checkEdge,而不必将所有参数/变量作为checkEdge(cell, cellIndex, rowIndex, width, height)传递?


您不能使用arguments,因为它们在箭头功能中不存在。您可以使用rest语法,但这在这里也不会特别有用。通常,虽然可以使用允许我们编写Ramda library的辅助函数(例如,来自point-free code的辅助函数),但此处的显式参数传递要简单得多(无论如何也更具可读性)。

09-25 18:19