Я пытаюсь передать какой-то параметр в функцию, используемую в качестве обратного вызова, как я могу это сделать?
function tryMe (param1, param2) {
alert (param1 + " and " + param2);
}
function callbackTester (callback, param1, param2) {
callback (param1, param2);
}
callbackTester (tryMe, "hello", "goodbye");
Ответы:
Если вы хотите что-то более общее, вы можете использовать переменную arguments следующим образом:
Но в остальном ваш пример работает нормально (аргументы [0] могут использоваться вместо обратного вызова в тестере)
источник
callback.apply(arguments)
тело функции forcallbackTester
расширяется за пределы сценария с двумя аргументами.Это также будет работать:
Еще один сценарий:
источник
if (typeof window[callback] == 'function') window[callback].call(this);
Ваш вопрос неясен. Если вы спрашиваете, как вы можете сделать это более простым способом, вам следует взглянуть на метод ECMAScript 5-го издания .bind () , который является членом Function.prototype . Используя его, вы можете сделать что-то вроде этого:
Вы также можете использовать следующий код, который добавляет метод, если он не доступен в текущем браузере:
пример
bind () - Документация по прототипу JS
источник
Array.prototype.slice.call(arguments)
иarguments.slice()
?f = function(arg1,arg2){alert(arg1+arg2);}.bind(this,"abc");
f("def") // Gives "abcdef"
Если у вас есть обратный вызов, который будет вызываться чем-то отличным от вашего кода с определенным количеством параметров, и вы хотите передать дополнительные параметры, вы можете передать функцию-оболочку в качестве обратного вызова, а внутри оболочки передать дополнительные параметры.
источник
Если вы не уверены, сколько параметров вы собираетесь передать в функции обратного вызова, используйте
apply
функцию.источник
Оберните 'дочернюю' функцию (и), передаваемую как / с аргументами в оболочках функций, чтобы предотвратить их оценку при вызове 'родительской' функции.
источник
Код из вопроса с любым количеством параметров и контекстом обратного вызова:
источник
Используйте функцию карри, как в этом простом примере.
источник
Новая версия для сценария, где обратный вызов будет вызываться какой-то другой функцией, а не вашим собственным кодом, и вы хотите добавить дополнительные параметры.
Например, давайте представим, что у вас много вложенных вызовов с успешными и ошибочными обратными вызовами. Я буду использовать угловые обещания для этого примера, но любой код javascript с обратными вызовами будет таким же для этой цели.
Теперь вы можете снять загромождение своего кода, определив функцию для регистрации ошибок, сохраняя источник ошибки для целей отладки. Вот как вы бы приступили к рефакторингу вашего кода:
Вызывающая функция все равно добавит параметр ошибки после параметров вашей функции обратного вызова.
источник
Я искал то же самое и в итоге нашел решение, и вот простой пример, если кто-то хочет пройти через это.
Также размещен на другой вопрос здесь
источник
Позвольте мне привести очень простой пример использования обратного вызова в стиле Node.js:
и HTML-код, который будет отображать результат:
Вы можете поиграть с этим здесь: https://jsfiddle.net/q8gnvcts/ - например, попробуйте передать строку вместо числа: myTest ('some string', 6, function (err, result) .. и посмотрите результат.
Я надеюсь, что этот пример помогает, потому что он представляет очень основную идею функций обратного вызова.
источник
узнать больше о синтаксисе распространения
источник
источник