Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 30.09.2020
Сообщений: 33
1

Синтаксис передачи функции в качестве аргумента

27.07.2022, 21:03. Показов 707. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я новичок в JavaScript. Плохо понимаю синтаксис(довольно странный) этого языка. Прошу помочь разобраться, что "приблизительно" делает данный кусок кода?(это чужой код, который взят из ответа на вопрос, на другом форуме):

Javascript
1
2
3
4
5
chrome.experimental.socket.create('tcp', '127.0.0.1', 8080, function(socketInfo) {
  chrome.experimental.socket.connect(socketInfo.socketId, function (result) {
        chrome.experimental.socket.write(socketInfo.socketId, "Hello, world!");         
    });
});
Как я вижу этот код:
1)мы вызываем функцию chrome.experimental.socket.create, передаем в нее 4 параметра.
2)в качестве 4-го параметра, в нее передается результат выполнения другой функции(или не результат а только ее определение?) Назовем ее функция №2
3)в качестве "еще одного параметра" мы как бы передаем переменную socketInfo, необходимую для выполнения функции №2?
4)аналогично, в функцию №2 мы передаем 2 параметра, 2-й пар-р - результат работы функции №3, или ее определение

Что все таки происходит в этом куске кода? Параметр socketInfo нуждается в объявлении, или это такой синтаксис, предполагающий, что переданное определение функции №2, используется в качестве параметра внутри chrome.experimental.socket.create, а socketInfo это как какое-то ключевое слово или что-то типа того?...

Javascript
1
2
3
4
chrome.sockets.tcp.create({}, function(createInfo) {
  chrome.sockets.tcp.connect(createInfo.socketId,
    '127.0.0.1', 8080, onConnectedCallback);
});
Есть еще похожий кусок кода...

Я запутался, распутайте меня пожалуйста
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2022, 21:03
Ответы с готовыми решениями:

Синтаксис передачи функции в функцию
Здравствуйте. Есть вот такой пример кода: #include <iostream> void Do( void(*WhatDo)() ) {...

Аналог передачи аргумента функции в С++
Если функция имее вид на дельфи procedure name(a,b:integer; var c: integer) , то как можно...

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель)
#include <iostream> using namespace std; template <class T1> class mas { public: T1 n; T1...

Передача функции в качестве аргумента
Передаю в функцию (А) в качестве аргумента другую функцию (Б). В функцию Б передаю переменную из А,...

4
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3610 / 1426 / 394
Регистрация: 14.03.2022
Сообщений: 3,403
27.07.2022, 21:39 2
Лучший ответ Сообщение было отмечено Sergey1986 как решение

Решение

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
// тут просто передается функция name1
chrome.experimental.socket.create('tcp', '127.0.0.1', 8080, name1);
 
// определение функции name1
function name1(socketInfo) {
   // тут передается функция name2
   chrome.experimental.socket.connect(socketInfo.socketId, name2);
   
   // определение функции name2
   function name2(result) {
        chrome.experimental.socket.write(socketInfo.socketId, "Hello, world!");         
    }
}
Так будет более понятно?

Добавлено через 5 минут
Цитата Сообщение от Sergey1986 Посмотреть сообщение
Параметр socketInfo нуждается в объявлении
Попытаюсь проиллюстрировать работу с параметром передаваемой функции
Javascript
1
2
3
4
5
6
7
8
9
10
// функция считает сумму чисел и запускает колбек-функцию
function sum(a, b, cb) {
    const val = a + b
    cb(val)
}
 
// собственно вызов функции с параметрами
sum(1, 2, function (n) {
    alert(n)
})
2
1 / 1 / 0
Регистрация: 30.09.2020
Сообщений: 33
27.07.2022, 22:11  [ТС] 3
Цитата Сообщение от krvsa Посмотреть сообщение
Так будет более понятно?
Так гораздо понятнее, спасибо! Получается, socketInfo не нуждается в объявлении, тогда вопрос: эта переменная кажется может использоваться для дальнейшей работы, наверняка он где-то хранится? Или в данной реализации(код все таки чужой), не предполагается его использование, и он сразу же уничтожается после окончания работы функции? И еще вопрос:
Цитата Сообщение от krvsa Посмотреть сообщение
// определение функции name2
   function name2(result) {
        chrome.experimental.socket.write(socketInfo.socketId, "Hello, world!");        
    }
}
Здесь определение функции нигде не использует "result", это просто возможно ошибка в коде, и должен стоять другой параметр или возможно я понял не до конца...
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3610 / 1426 / 394
Регистрация: 14.03.2022
Сообщений: 3,403
27.07.2022, 22:32 4
Цитата Сообщение от Sergey1986 Посмотреть сообщение
наверняка он где-то хранится?
В моем примере это значение переменной val при передаче и собственно n, когда функция приняла как параметр.
Но передать могут все что угодно. Результат вычисления или значение некой переменной...
Цитата Сообщение от Sergey1986 Посмотреть сообщение
и он сразу же уничтожается после окончания работы функции?
Дело в том что область видимости в JS довольно своеобразная... Значение переменной будет "жить" пока есть тот, кто на нее может ссылаться.
Вот пример
Javascript
1
2
3
4
5
6
//
function test(n) {
   setInterval(_ => console.log(n), 2000)
}
 
test(10)
В этом примере переменная n будет "жива" пока браузер или вкладку не закроют.

Там в JS довольно сложный "сборщик мусора"...

Добавлено через 1 минуту
Цитата Сообщение от Sergey1986 Посмотреть сообщение
нигде не использует "result", это просто возможно ошибка в коде
Да, не используется. Зачем так написали - это уже х/з...
1
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,859
27.07.2022, 23:38 5
Цитата Сообщение от krvsa Посмотреть сообщение
Да, не используется. Зачем так написали - это уже х/з.
Это коллбэк функция.

Добавлено через 48 минут
Ах, речь про result.

Добавлено через 5 минут
Цитата Сообщение от Sergey1986 Посмотреть сообщение
chrome.experimental
Похоже, этого апи и так нет.
0
27.07.2022, 23:38
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2022, 23:38
Помогаю со студенческими работами здесь

Цикл for в качестве аргумента функции
Как сделать чтобы функция принимала аргументом сам цикл for? Последовательно подставляла данные из...

Передача функции в качестве аргумента другой функции
в книге Харви и Пол Дейтл нашел следующий вариант решения задачи, передачи функции в качестве...

Использование массивов в качестве аргумента функции
Расстояние l от начала координата до точки n-мерного пространства с координатами(x1,x2....xn)...

Передача массива в качестве аргумента функции
В общем нужно передать массив в качестве аргумента без указания его размера, чтобы в дальнейшем...

Глобальный массив в качестве аргумента функции
Наверное такое делать нельзя, т.к. в этом случае получил ошибку, что нельзя переопределить...

Передача функции в качестве аргумента массив
Помогите пожалуйста! есть некая рекурсивная функция N которая принимает 2 целочисленные переменные...

Лямбда-функция в качестве аргумента функции
Добрый вечер! Как надо сделать, чтобы вот эта функция могла работать с лямбдой-функцией?: ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как обучить нейросеть создания картинок на Python
bytestream 24.01.2025
В эпоху цифровых технологий искусственный интеллект становится неотъемлемой частью творческого процесса. Особое место в этой области занимает разработка и обучение нейронных сетей для создания. . .
Как обучить нейросеть генерации текста на Python
bytestream 24.01.2025
В современном мире искусственный интеллект и машинное обучение становятся неотъемлемой частью многих технологических решений. Одной из наиболее интересных и востребованных задач в этой области. . .
Машинное обучение на Python
bytestream 24.01.2025
Введение в машинное обучение на Python Машинное обучение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, которая позволяет компьютерным системам. . .
Как удалить вирус-майнер с компьютера
hw_wired 24.01.2025
Вирусы-майнеры стали одной из наиболее серьезных угроз для пользователей компьютеров. Эти вредоносные программы тайно используют вычислительные ресурсы зараженного устройства для добычи криптовалюты. . .
Что такое веб-сервер, для чего он нужен и как работает
bytestream 24.01.2025
В современную эпоху цифровых технологий веб-сервер является фундаментальным компонентом интернет-инфраструктуры, обеспечивающим функционирование множества онлайн-сервисов и веб-сайтов. Этот. . .
Как в цикле for перебрать все элементы в словаре в Python
bytestream 24.01.2025
Словари в Python представляют собой мощные структуры данных, которые позволяют хранить информацию в формате ключ-значение. Эта особенность делает их незаменимыми при работе с данными, где требуется. . .
Как отменить rebase в Git
hw_wired 24.01.2025
Git rebase представляет собой мощный инструмент для управления историей коммитов в системе контроля версий Git. Этот механизм позволяет разработчикам изменять последовательность, комбинировать или. . .
Как поменять цвет input placeholder с помощью CSS
bytestream 24.01.2025
В веб-разработке оформление элементов пользовательского интерфейса играет ключевую роль в создании привлекательного и интуитивно понятного дизайна. Особое внимание уделяется формам ввода данных, где. . .
Как перебрать все значения в перечислении (enum) в C#
bytestream 24.01.2025
Перечисление (enum) в языке программирования C# представляет собой специальный тип данных, который позволяет определить набор именованных констант. Этот мощный инструмент особенно полезен, когда. . .
Как обойтись без проверки на null, чтобы избежать NullPointerExce­ption в Java
bytestream 24.01.2025
NullPointerException (NPE) является одним из самых распространенных исключений в Java, создающих серьезные проблемы при разработке программного обеспечения. Данное исключение возникает при попытке. . .
Что лучше использовать в href ссылок в JavaScript: "#" или "javascript:voi­­d(0)­"
bytestream 24.01.2025
При разработке веб-приложений важную роль играет правильное использование HTML-ссылок в сочетании с JavaScript. Одним из ключевых аспектов является выбор корректного значения атрибута href для. . .
Как узнать индекс элемента списка по его значению в Python
hw_wired 24.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только манипулировать элементами списка, но и определять их точное местоположение. Индекс элемента представляет собой. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru