Я новичок в JavaScript и работаю с библиотекой JavaScript datePicker. Я в значительной степени использую код из коробки, и функция, которая считывает текущую выбранную дату, меня немного смущает. Вот код (который я немного изменил, чтобы отформатировать дату, чтобы сопоставить ее с датами моего набора данных).
const picker = datepicker(document.querySelector('#inlineDatepicker'), {
// Event callbacks.
onSelect: function(instance) {
console.info(instance)
var instanceSplit = instance.dateSelected.toString().split(" " ,4)
var instanceClean = instanceSplit.toString().replace(/,/g, ' ')
if (instanceClean === 'Mon Feb 11 2019') {
console.info('datematch!')
return 'blue'
}
},
});
Я не знаком с форматом функции onSelect: function(instance) {}. Все функции, которые я когда-либо видел, написаны в таком формате: function someFunction(parameter) {}.
Что приводит меня к моему вопросу: каково фактическое имя функции onSelect: function(instance) {}? Например, если я хочу изменить внешний вид своих данных на основе выбранной даты, т. е. вернуть «синюю» черту на мои точки данных, какое имя функции я вызываю? Например, приведенный здесь код пытается передать возвращаемое значение штриха в приведенную выше функцию, но не распознает onSelect как функцию (говорит, что оно не определено):
var events = mapG.selectAll("circle")
.data(allSFEvents)
.enter().append("circle")
.style("stroke", onSelect)
Что, по-вашему, должно означать .style("stroke", onSelect)?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В зависимости от того, что вы подразумеваете под «именем», эта функция либо не имеет имени (это анонимный), что является строгим значением в соответствии с определением языка; или же «имя» в разговорной речи - это имя свойства, которому оно присвоено.
Проблема с разговорным значением, что имя является именем свойства, заключается в том, что оно может привести к ложным предположениям об отношениях между анонимной функцией и объектом, в котором находится это свойство. На самом деле есть постоянные отношения нет; анонимная функция свободна от какой-либо неявной ассоциации с любым «родительским» объектом.
В вашем случае маловероятно, что вы когда-нибудь захотите, чтобы напрямую вызывал эту функцию. Он настроен как обработчик событий, что означает, что среда выполнения или какая-либо среда будут вызывать вашу функцию в соответствующее время. В общем, если свойство объекта ссылается на функцию, вы можете вызвать эту функцию через свойство:
var someObject = {
someFunction: function() { alert("Hi!"); }
};
someObject.someFunction(); // alerts "Hi!"
Спасибо за ответы. Позвольте мне упростить мой вопрос: я думаю, что я пытаюсь просто использовать эту функцию onSelect для возврата текущей даты, чтобы я мог использовать ее вне функции. var selectedDate var selectedDate onSelect: function(instance) { var instanceSplit = instance.dateSelected.toString().split(" " ,4) var instanceClean = instanceSplit.toString().replace(/,/g, ' ') selectedDate = instanceClean return selectedDate }, });
Что ж, это проблема разные: функция, используемая в качестве обработчика событий в любом типичном контексте JavaScript, не «возвращает» что-либо. Конечно, есть несколько исключений, но в целом они связаны с управлением механизмами обработки событий, а не с передачей данных приложения из одного места в другое.
В порядке. Как мне тогда вернуть дату? Я хочу использовать дату, выбранную в других разделах моего кода.
Если обработчик события захватывает некоторую информацию, он может сохранить ее в каком-либо доступном хранилище данных для использования, когда она потребуется следующему обработчику событий. События по самой своей природе происходят тогда, когда они случаются.
@ DiamondJoe12 Я пытаюсь сказать, что то, как вы задаете этот вопрос, не имеет смысла. Ваш обработчик событий может вызвать какую-то другую функцию и передать ей информацию, или он может где-то сохранить информацию. Термин «возврат» относится к вызовам функций синхронный, а обработчик событий просто не об этом.
Хм. Да, я думаю, что хочу сохранить информацию где-нибудь. Например, глобальная переменная, которая будет постоянно обновляться по мере изменения выбранной даты. Имеет ли это смысл?
Да, тот имеет смысл. Теперь поймите, что, поскольку события происходят тогда, когда они происходят, вы должны проверить, действительно ли значение доступно в тот момент, когда вы собираетесь его использовать.
datepicker- это метод пользовательского интерфейса jQuery, или у вас может быть какая-то другая библиотека, судя по тому, как вы ее называете. JavaScript — это язык, а не библиотека компонентов (действительно, он не ограничивается браузерами). Что касается вашего кода; не имеет большого смысла возвращать название цвета из обработчика событийonSelect(который является свойством объекта, который вы передаете функцииdatepicker).