我有两个问题:
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
?
可以,而且可以。问题是rows
是undefined
,就像内部cell
中的Array.from
一样。请注意,您是从零开始创建数组的(只是一个具有长度但没有元素的对象),还没有任何值。
我如何才能将createBoard
的所有参数/变量授予checkEdge
,而不必将所有参数/变量作为checkEdge(cell, cellIndex, rowIndex, width, height)
传递?
您不能使用arguments
,因为它们在箭头功能中不存在。您可以使用rest语法,但这在这里也不会特别有用。通常,虽然可以使用允许我们编写Ramda library的辅助函数(例如,来自point-free code的辅助函数),但此处的显式参数传递要简单得多(无论如何也更具可读性)。