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

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

27.07.2022, 21:03. Показов 702. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
3538 / 1368 / 379
Регистрация: 14.03.2022
Сообщений: 3,261
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
3538 / 1368 / 379
Регистрация: 14.03.2022
Сообщений: 3,261
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
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2022, 23:38
Помогаю со студенческими работами здесь

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru