Как передать функцию в качестве параметра без функции, выполняемой в «родительской» функции или без использования eval()
? (Поскольку я прочитал, что это небезопасно.)
У меня есть это:
addContact(entityId, refreshContactList());
Это работает, но проблема в том, что refreshContactList
срабатывает, когда вызывается функция, а не когда она используется в функции.
Я мог бы обойти это, используя eval()
, но это не лучшая практика, согласно тому, что я прочитал. Как я могу передать функцию в качестве параметра в JavaScript?
javascript
function
parameters
imperium2335
источник
источник
addContact(1, function(id) { console.log(id); });
=
знака ...class myFuncs {
а неclass myFuncs = {
. Вам также необходимо работать в среде, которая поддерживает синтаксис класса (пока не все браузеры поддерживают его). Если вы все еще боретесь, возможно, он лучше подходит для совершенно нового вопроса, поскольку ваша проблема не в передаче функций, а в общем синтаксисе ES.Если вы хотите передать функцию, просто назовите ее по имени без скобок:
Но иногда вы можете захотеть передать функцию с включенными аргументами , но не вызывать ее, пока не будет вызван обратный вызов. Для этого при вызове просто оберните его в анонимную функцию, например так:
Если вы предпочитаете, вы также можете использовать функцию apply и иметь третий параметр, который представляет собой массив аргументов, например:
источник
Пример 1:
Пример 2:
посмотри на это
источник
Чтобы передать функцию в качестве параметра, просто удалите скобки!
Идея заключается в том, что функция очень похожа на переменную. Вместо того чтобы писать
Вы могли бы также написать
Между ними есть небольшие различия, но в любом случае - оба они являются допустимыми способами определения функции. Теперь, если вы определяете функцию и явно присваиваете ее переменной, кажется вполне логичным, что вы можете передать ее в качестве параметра другой функции и вам не нужны скобки:
источник
typeof paramFunc == "function"
, потому что если оно не вызывается, то вы можете его игнорировать.Среди программистов на JavaScript есть фраза: «Eval is Evil», поэтому старайтесь избегать этого любой ценой!
В дополнение к ответу Стива Фентона вы также можете напрямую передавать функции.
источник
Я отрубил все свои волосы с этим вопросом. Я не мог заставить приведенные выше примеры работать, поэтому я закончил так:
И это работает как шарм ... для того, что мне нужно, по крайней мере. Надеюсь, это поможет некоторым.
источник
Я предлагаю поместить параметры в массив, а затем разделить их с помощью
.apply()
функции. Так что теперь мы можем легко передать функцию с большим количеством параметров и выполнить ее простым способом.источник
Вы также можете использовать,
eval()
чтобы сделать то же самое.Вот и все. Я также искал это решение и пробовал решения, представленные в других ответах, но, наконец, получил его на примере выше.
источник
Вот другой подход:
источник
На самом деле, кажется, немного сложнее, нет.
метод get в качестве параметра:
Вы можете указать в качестве параметра метод:
источник
Другие ответы отлично справляются с описанием того, что происходит, но одна важная «ошибка» - убедиться, что то, через что вы проходите, действительно является ссылкой на функцию.
Например, если вы передадите строку вместо функции, вы получите ошибку:
Смотрите JsFiddle
источник
Иногда, когда вам нужно иметь дело с обработчиком событий, поэтому нужно передавать событие в качестве аргумента, большинству современных библиотек, таких как реагировать, angular может понадобиться это.
Мне нужно переопределить функцию OnSubmit (функция из сторонней библиотеки) с некоторой пользовательской проверкой наactjs, и я передал функцию и событие, как показано ниже
ИЗНАЧАЛЬНО
СДЕЛАНО НОВУЮ ФУНКЦИЮ
upload
и вызывается переданоonSubmit
и событие в качестве аргументаисточник
Вы также можете использовать JSON для хранения и отправки функций JS.
Проверьте следующее:
Это напечатает «а».
Следующее имеет тот же эффект, что и выше:
Что также имеет тот же эффект со следующим:
И парадигма объекта, использующая Class в качестве прототипа объекта:
источник