Ну, во первых, с ошибками у меня тут все в порядке
Все проверено и сбоев нет благодаря отличному инструменту Web Developer для Firefox!
Во вторых, этот this в функции placeCubs() действительно содержит объект окна, но вот интересная штука - кроме этого он содержит еще и все переменные, которые были созданы раньше обращения к этому объекту в такой форме, в виде массива с ассоциативными ключами, которые соответствуют именам этих переменных!
Вот статья по этой теме!
В третьих, спасибо за совет насчет field.children[0]..., действительно это слегка уменьшает код и при этом работает! Я действительно не знал, что можно так делать
В четвертых, элемент массива cubeMap[i][1] в 43 строке скрипта не пустой, так как при загрузке сценария в браузер запускается функция genCubeMap() с локальной рекурсивной функцией внутри, которая создает значения в массиве cubeMap в виде массива 2ого уровня с рядом значений в 37 строке скрипта. Затем, после срабатывания события window.onload запускается функция placeCubs(), которая начинает обращаться к массиву cubeMap, в котором уже присутствуют 16 элементов с индексами с 0 по 15, из которых задействуются 15 элементов с индексами с 0 по 14.
Эта функция расставляет имеющиеся в HTML документе блоки с id="cube1" и до "cube15", с помощью свойств стиля left и top, в соответствии со значениями, помещенными рекурсивной функцией getCubeCoords() в массив cubeMap[i] с индексами [1] и [2], т.е. эти значения оказываются в cubeMap[i][1] и cubeMap[i][2] позициях и, по сути, являются координатами месторасположения каждого конкретного блока внутри поля field.
Надеюсь, я понятно объяснил?