Вы не должны передавать x в функцию обработчика событий.При передаче x функция создает новую переменную с таким именем, которая относится к функции, а не к фактическому x , определенному в глобальной области видимости, который ссылается на таблицу.Вы можете либо переименовать имя параметра, либо удалить его, поскольку вы не используете его внутри функции:
//variable for the table.
var x = document.getElementById("myTable");
//index for the row number and cell number
var rowIndex= 0;
var cellIndex = 0;
//this outlines the cell's starting position.
x.rows[rowIndex].cells[cellIndex].style.border = "10px solid black";
//creation of the button
var button = document.createElement ("button");
button.innerText = "DOWN"
button.id = "d"
document.body.appendChild(button);
//I am trying to pass x to the function. Then use the rowIndex and cellIndex to increment by 1
//depending on if the user wants to move the outline border up, down, left, or right.
//I just am trying to get the down button first.
button.addEventListener ("click", function(e){
if(x.rows.length-1 == rowIndex) return false; // return if last row selected;
//The purpose here is to change the outlined cell back to the default border of the table.
x.rows[rowIndex].cells[cellIndex].style.border = "1px solid black";
//The purpose here is to select the cell immediately below to outline it.
x.rows[rowIndex+1].cells[cellIndex].style.border = "thick solid black";
rowIndex++; // Increment the index
}
);
table, td {
border: 1px solid black;
}
<table id="myTable">
<tr>
<td>cell 1</td>
<td>cell 2</td>
<td>cell 3</td>
<td>cell 4</td>
</tr>
<tr>
<td>cell 5</td>
<td>cell 6</td>
<td>cell 7</td>
<td>cell 8</td>
</tr>
<tr>
<td>cell 9</td>
<td>cell 10</td>
<td>cell 11</td>
<td>cell 12</td>
</tr>
</table>