Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 18.07.2013
Сообщений: 19

Return callback функции, вызываемой в цикле

25.05.2014, 17:29. Показов 3530. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Пишу extension для шаблонизатора, который получает через AJAX шаблон, в нем находит текст между специфическими тегами и отправляет его на перевод (вызывает callback функцию, которая ищет соответствие между полученной строкой как ключем в JSON-библиотеке и возвращает перевод).

Теперь о самой проблеме. Все работает отлично, но в loop'e парсера, когда проходит итерация, не работает return callback-функции.

Упрощенно выглядит так:


JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Вариант первый, который нужен, но не работает
var print = function (info) {
    return info.tits
}
 
//Вариант второй, работает, когда без return
var print = function (info) {
    alert(info.tits)
}
 
//Эмуляция возвращенного массива
var arr = [];
var objOne = {tits: 'tide'}
var objTwo = {tits: 'huge'}
arr.push(objOne)
arr.push(objTwo)
 
 
//Упрощенная функции, перебирающий массив
var parser = function () {
    for (var i in arr) {
        print(arr[i]) 
     }}
 
parser();
print(arr[0]) возвращает все правильно.
parser() возвращает undefined, хотя если заменить в функции print return на alert, например,то все работает.

помогите советом )

Спасибо!

Добавлено через 13 минут
судя по выводу undefined, где-то теряется контекст. пляски с this и function.protoptype.bind не помогли, возвращает снова undefined... ((
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2014, 17:29
Ответы с готовыми решениями:

Передача переменных из функции вызываемой событием
Здравствуйте, форумчане. У меня вопрос такого рода. Событие нажатия на кнопку вызывает на выполнение функцию. А для конечной...

Как из функции, вызываемой по событию, вернуть значение?
Дано: функция, вызываемая по событию. Требуется вернуть значение функции. Конечно, можно использовать глобальную переменную для передачи...

Callback функции
Есть запрос вроде этого: somevar.select(data, function(response) { // callback code. }); Как отсюда вытащить данные...

9
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
25.05.2014, 18:16
У вас функция parser ничего и не должна возвращать ... return в ней я не вижу
0
0 / 0 / 0
Регистрация: 18.07.2013
Сообщений: 19
25.05.2014, 18:41  [ТС]
parser вызывает на каждой итерации print, который, по идее, должен возвращать значение.
почему тогда, если print вызывает alert, а не return, все работает?
0
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
25.05.2014, 18:42
Потому что надо различать понятия исполнение функции и возврат функцией значения. У вас пробел в этом очевидно.
0
0 / 0 / 0
Регистрация: 18.07.2013
Сообщений: 19
25.05.2014, 18:49  [ТС]
проблема в том, если реализовать вот так

JavaScript
1
2
3
4
var parser = function () {
    for (var i in arr) {
        return print(arr[i]) 
     }}

return будет вызван единожды и директива continue не помогает в данном случае.
0
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
25.05.2014, 18:53
все правильно, поясните смысл функции print??? зачем она и какую функциональную нагрузку она должна выполнять?
0
0 / 0 / 0
Регистрация: 18.07.2013
Сообщений: 19
25.05.2014, 18:59  [ТС]
print - это навороченая внешняя функция, которая в итоге возвращает по переданному ключу замену из словаря (в главном посте описано как). я просто упростил её до формального return.

у меня нет прав её редактирования по соглашению, и вот именно её мне нужно вызывать её i раз, передав в неё отфильтрованное значение. (parser тоже довольно монструозная функция в оригинале, 100-200 строчек кода)
0
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
25.05.2014, 19:02
Ну вот вы ее и вызываете) Ошибок в вашем коде нет, print все верно возвращает. Проверьте в консоле:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var print = function (info) {
    return info.tits
}
 
var arr = [];
var objOne = {tits: 'tide'}
var objTwo = {tits: 'huge'}
arr.push(objOne)
arr.push(objTwo)
 
var parser = function () {
    for (var i in arr) {
        console.log(print(arr[i])); // title hudge
     }
 };
 
parser();
0
0 / 0 / 0
Регистрация: 18.07.2013
Сообщений: 19
25.05.2014, 19:05  [ТС]
c console.log работает, это понятно. а почему при простом вызове не заменяет ничего?
или это я переработал и уже туплю дико???
0
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
25.05.2014, 19:07
Цитата Сообщение от Prometheus Посмотреть сообщение
почему при простом вызове не заменяет ничего?
Цитата Сообщение от vovandr Посмотреть сообщение
Потому что надо различать понятия исполнение функции и возврат функцией значения.
Цитата Сообщение от Prometheus Посмотреть сообщение
или это я переработал и уже туплю дико
Очевидно да
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.05.2014, 19:07
Помогаю со студенческими работами здесь

Задача с подпиской на функции и callback
Вот такая задача. Уже несколько часов сижу и абсолютно никаких мыслей. По комментариям, думаю, понятно, что долен делать код. // I need...

Получить данные и callback функции
Всем привет ! Ребят, пишу приложение. Вызываю апи вконтакта для получения списка друзей пользователя. Как все это занести в сторонний...

Почему callback-функции называются функциями ОБРАТНОГО вызова
Доброго времени. Нуждаюсь в объяснении. Очередной вопрос в стиле «Что такое callback-функции и зачем они нужны». Я уже перечитал...

Return переменной из функции
Скажите пожалуйста, как вернуть переменную el, вот так не работает el нужно вернуть из get_svg_element function...

This в callback функции jQuery.post
Нужно изменить поля объекта, который вызвал post запрос. Но в функции this указывает на что-то другое. Как обратиться к экземпляру объекта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru