Причина в том, что ответ геокодера асинхронный. Цикл for
проходит через каждый элемент, и, поскольку 'Jaipur' является последним значением, это значение все еще сохраняется в tempLoc, когда ответ от геокодера наконец приходит и вызывает createMarker:
createMarker(latLonArray[i],tempLoc);
// by this time tempLoc always equals tempLoc=locations[locations.length-1];
Что вы на самом деле хотите сделать, так это вернуть имя, возвращаемое геокодером
results[0].address_components[0].long_name
Итак, ваш вызов createMarker будет выглядеть так:
createMarker(latLonArray[i], results[0].address_components[0].long_name );