Что вернет эта функция? Пустой массив или совокупность объектов

#javascript

#javascript

Вопрос:

 var rowData = [];

function someName() {
    JsonClient.onload = function () {
        rowData.push("sasas");
        rowData.push("sasas1");
        rowData.push("sasas2");
        rowData.push("sasas3");
    };

    return rowData;
}
  

Это возвращает мне пустые rowData. Почему?

Ребята, я допустил опечатку при публикации

Комментарии:

1. У вас есть синтаксические ошибки в каждой строке «push»

2. Ну, я думаю, rowData не входит в область действия вашей функции someName(), потому что она объявлена внутри другой функции …..?

3. Почему бы вам просто не протестировать это самостоятельно: D

4. проверьте свой код, у вас ошибки в строках, вы забыли закрыть »

5. Убедитесь, что ваш код допустим, проверьте консоль ошибок, также убедитесь, что функции вызваны.

Ответ №1:

Функция someName никогда не вызывается (например someName(); ). Поскольку она никогда не вызывается, push инструкции никогда не выполняются.

Даже если бы она была вызвана, someName функция просто присваивает функции анонимного обратного вызова JsonClient.onload . Ваш код не показывает нам, что JsonClient такое, но, похоже, можно с уверенностью предположить, что это обработчик события для HTTP-ответа. Эта функция не будет вызвана до тех пор, пока браузер не получит HTTP-ответ, к этому времени return инструкция уже была бы выполнена. Вы не можете выполнить возврат из Ajax-запроса, вам приходится иметь дело с данными в самом обратном вызове.

Ответ №2:

У вас есть функция, которая объявляет анонимную функцию, которая не будет выполняться до тех пор, пока ваш JsonClient не загрузится.

Вам нужно будет сделать это:

 var rowData = [];
function someName(){
   JsonClient.onload = function(){
     rowData.push("sasas");
     rowData.push("sasas1");
     rowData.push("sasas2");
     rowData.push("sasas3");
     useRowData(rowData);
   };
   // here I would expect a call like JsonClient.send();
}
function useRowData(rowData) {
  alert(rowData);
}
someName(); // execute the actual function
  

Ответ №3:

Вы забыли заключить в кавычки каждую строку, которую пытаетесь вставить.. Как только вы это сделаете, она вернет массив строк.

Комментарии:

1. Нет … проблема была не в этом… почему мои rowData пусты

Ответ №4:

Вы не закрыли строки… это должно сработать var rowData = [];

 function someName(){
   JsonClient.onload = function(){
   rowData.push("sasas");
   rowData.push("sasas1");
   rowData.push("sasas2");
   rowData.push("sasas3");
};

return rowData;
  

}