А - асихронность.
Упростим ваш код:
function() {
func(function() {
var array = new Array();
return array;
})
}
Ваш код в третей функции исполняется во второй(которую мы вызываем), в первой ни array, ни return array доступен не будет. Более того, если сделать так:
function() {
var array = new Array();
func(function() {
// Меняем тут array
});
return array;
}
Будет возвращать пустой массив!
В чем же дело? Вы отправляете запрос на сервер, а код исполняется дальше. То есть третья функция может быть вызвана в любой момент - когда придет ответ от сервера. Можно использовать сихронный вариант, но это плохая идея.
Решения, как всегда, два: callback и Promise.
Решение с callback:
function(callback) {
func(function() {
var array = new Array();
callback(array);
})
}
// Использование
func(function(array) {
console.log(array);
});
Решение с Promise сложнее и требут знание промисов, собственно говоря. Но в использовании оно проще
function() {
return new Promise(function(resolve) {
func(function() {
var array = new Array();
resolve(array);
});
});
}
// Использование
func().then(function(array) { console.log(array) });
К прочтению о Promises