Edit in JSFiddle

var n = 8; //размер доски
var chessBoardTable = document.getElementById('chessBoard'); //элемент страницы
var rows = _.chain(n).range().map(function(i) {
  return {
    cells: _.range(n)
  };
}).value();
// chain - объявление цепочки последовательных действий, передаётся аргумент для первого действия цепочки. для последующих действий аргументом будет являться результат предыдущего действия
// range - получение диапазона (массива) чисел заданной длины
// map - сопостовление элемента массива другому элементу, полученному на основе первого
// возвращаем для каждого индекса строки объект содержащий свойство cells являющийся диапазоном чисел от 0 до N - 1
// value - получение результата последнего действия цепочки
var viewModel = {
  rows: rows
}; //модель для предстваления таблицы N x N
ko.applyBindings(viewModel, chessBoardTable); //назначение объекта viewModel в качестве контекста для элемента таблицы
<table id="chessBoard">
  <!--data-bind аттрибут содержащий объект, описывающий правила формирования внутреннего контента элемента-->
  <tbody data-bind="foreach: rows">
    <!--в данном случае используется foreach, для повторения разметки описанной внутри элемента для каждого элемента массива-->
    <tr data-bind="foreach: cells">
      <td>
        <div></div>
      </td>
    </tr>
  </tbody>
</table>
tr:nth-child(odd) > td:nth-child(odd) {
  background-color: black;
}

tr:nth-child(odd) > td:nth-child(even) {
  background-color: white;
}

tr:nth-child(even) > td:nth-child(odd) {
  background-color: white;
}

tr:nth-child(even) > td:nth-child(even) {
  background-color: black;
}

td > div {
  min-height: 20px;
  min-width: 20px;
}

External resources loaded into this fiddle: